593 lines
		
	
	
	
		
			27 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			593 lines
		
	
	
	
		
			27 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| Git 2.11 Release Notes
 | |
| ======================
 | |
| 
 | |
| Backward compatibility notes.
 | |
| 
 | |
|  * An empty string used as a pathspec element has always meant
 | |
|    'everything matches', but it is too easy to write a script that
 | |
|    finds a path to remove in $path and run 'git rm "$paht"' by
 | |
|    mistake (when the user meant to give "$path"), which ends up
 | |
|    removing everything.  This release starts warning about the
 | |
|    use of an empty string that is used for 'everything matches' and
 | |
|    asks users to use a more explicit '.' for that instead.
 | |
| 
 | |
|    The hope is that existing users will not mind this change, and
 | |
|    eventually the warning can be turned into a hard error, upgrading
 | |
|    the deprecation into removal of this (mis)feature.
 | |
| 
 | |
|  * The historical argument order "git merge <msg> HEAD <commit>..."
 | |
|    has been deprecated for quite some time, and will be removed in the
 | |
|    next release (not this one).
 | |
| 
 | |
|  * The default abbreviation length, which has historically been 7, now
 | |
|    scales as the repository grows, using the approximate number of
 | |
|    objects in the repository and a bit of math around the birthday
 | |
|    paradox.  The logic suggests to use 12 hexdigits for the Linux
 | |
|    kernel, and 9 to 10 for Git itself.
 | |
| 
 | |
| 
 | |
| Updates since v2.10
 | |
| -------------------
 | |
| 
 | |
| UI, Workflows & Features
 | |
| 
 | |
|  * Comes with new version of git-gui, now at its 0.21.0 tag.
 | |
| 
 | |
|  * "git format-patch --cover-letter HEAD^" to format a single patch
 | |
|    with a separate cover letter now numbers the output as [PATCH 0/1]
 | |
|    and [PATCH 1/1] by default.
 | |
| 
 | |
|  * An incoming "git push" that attempts to push too many bytes can now
 | |
|    be rejected by setting a new configuration variable at the receiving
 | |
|    end.
 | |
| 
 | |
|  * "git nosuchcommand --help" said "No manual entry for gitnosuchcommand",
 | |
|    which was not intuitive, given that "git nosuchcommand" said "git:
 | |
|    'nosuchcommand' is not a git command".
 | |
| 
 | |
|  * "git clone --recurse-submodules --reference $path $URL" is a way to
 | |
|    reduce network transfer cost by borrowing objects in an existing
 | |
|    $path repository when cloning the superproject from $URL; it
 | |
|    learned to also peek into $path for presence of corresponding
 | |
|    repositories of submodules and borrow objects from there when able.
 | |
| 
 | |
|  * The "git diff --submodule={short,log}" mechanism has been enhanced
 | |
|    to allow "--submodule=diff" to show the patch between the submodule
 | |
|    commits bound to the superproject.
 | |
| 
 | |
|  * Even though "git hash-objects", which is a tool to take an
 | |
|    on-filesystem data stream and put it into the Git object store,
 | |
|    can perform "outside-world-to-Git" conversions (e.g.
 | |
|    end-of-line conversions and application of the clean-filter), and
 | |
|    it has had this feature on by default from very early days, its reverse
 | |
|    operation "git cat-file", which takes an object from the Git object
 | |
|    store and externalizes it for consumption by the outside world,
 | |
|    lacked an equivalent mechanism to run the "Git-to-outside-world"
 | |
|    conversion.  The command learned the "--filters" option to do so.
 | |
| 
 | |
|  * Output from "git diff" can be made easier to read by intelligently selecting
 | |
|    which lines are common and which lines are added/deleted
 | |
|    when the lines before and after the changed section
 | |
|    are the same.  A command line option (--indent-heuristic) and a
 | |
|    configuration variable (diff.indentHeuristic) are added to help with the
 | |
|    experiment to find good heuristics.
 | |
| 
 | |
|  * In some projects, it is common to use "[RFC PATCH]" as the subject
 | |
|    prefix for a patch meant for discussion rather than application.  A
 | |
|    new format-patch option "--rfc" is a short-hand for "--subject-prefix=RFC PATCH"
 | |
|    to help the participants of such projects.
 | |
| 
 | |
|  * "git add --chmod={+,-}x <pathspec>" only changed the
 | |
|    executable bit for paths that are either new or modified. This has
 | |
|    been corrected to change the executable bit for all paths that match
 | |
|    the given pathspec.
 | |
| 
 | |
|  * When "git format-patch --stdout" output is placed as an in-body
 | |
|    header and it uses RFC2822 header folding, "git am" fails to
 | |
|    put the header line back into a single logical line.  The
 | |
|    underlying "git mailinfo" was taught to handle this properly.
 | |
| 
 | |
|  * "gitweb" can spawn "highlight" to show blob contents with
 | |
|    (programming) language-specific syntax highlighting, but only
 | |
|    when the language is known.  "highlight" can however be told
 | |
|    to guess the language itself by giving it "--force" option, which
 | |
|    has been enabled.
 | |
| 
 | |
|  * "git gui" l10n to Portuguese.
 | |
| 
 | |
|  * When given an abbreviated object name that is not (or more
 | |
|    realistically, "no longer") unique, we gave a fatal error
 | |
|    "ambiguous argument".  This error is now accompanied by a hint that
 | |
|    lists the objects beginning with the given prefix.  During the
 | |
|    course of development of this new feature, numerous minor bugs were
 | |
|    uncovered and corrected, the most notable one of which is that we
 | |
|    gave "short SHA1 xxxx is ambiguous." twice without good reason.
 | |
| 
 | |
|  * "git log rev^..rev" is an often-used revision range specification
 | |
|    to show what was done on a side branch merged at rev.  This has
 | |
|    gained a short-hand "rev^-1".  In general "rev^-$n" is the same as
 | |
|    "^rev^$n rev", i.e. what has happened on other branches while the
 | |
|    history leading to nth parent was looking the other way.
 | |
| 
 | |
|  * In recent versions of cURL, GSSAPI credential delegation is
 | |
|    disabled by default due to CVE-2011-2192; introduce a http.delegation
 | |
|    configuration variable to selectively allow enabling this.
 | |
|    (merge 26a7b23429 ps/http-gssapi-cred-delegation later to maint).
 | |
| 
 | |
|  * "git mergetool" learned to honor "-O<orderfile>" to control the
 | |
|    order of paths to present to the end user.
 | |
| 
 | |
|  * "git diff/log --ws-error-highlight=<kind>" lacked the corresponding
 | |
|    configuration variable (diff.wsErrorHighlight) to set it by default.
 | |
| 
 | |
|  * "git ls-files" learned the "--recurse-submodules" option
 | |
|    to get a listing of tracked files across submodules (i.e. this
 | |
|    only works with the "--cached" option, not for listing untracked or
 | |
|    ignored files).  This would be a useful tool to sit on the upstream
 | |
|    side of a pipe that is read with xargs to work on all working tree
 | |
|    files from the top-level superproject.
 | |
| 
 | |
|  * A new credential helper that talks via "libsecret" with
 | |
|    implementations of XDG Secret Service API has been added to
 | |
|    contrib/credential/.
 | |
| 
 | |
|  * The GPG verification status shown by the "%G?" pretty format specifier
 | |
|    was not rich enough to differentiate a signature made by an expired
 | |
|    key, a signature made by a revoked key, etc.  New output letters
 | |
|    have been assigned to express them.
 | |
| 
 | |
|  * In addition to purely abbreviated commit object names, "gitweb"
 | |
|    learned to turn "git describe" output (e.g. v2.9.3-599-g2376d31787)
 | |
|    into clickable links in its output.
 | |
| 
 | |
|  * "git commit" created an empty commit when invoked with an index
 | |
|    consisting solely of intend-to-add paths (added with "git add -N").
 | |
|    It now requires the "--allow-empty" option to create such a commit.
 | |
|    The same logic prevented "git status" from showing such paths as "new files" in the
 | |
|    "Changes not staged for commit" section.
 | |
| 
 | |
|  * The smudge/clean filter API spawns an external process
 | |
|    to filter the contents of each path that has a filter defined.  A
 | |
|    new type of "process" filter API has been added to allow the first
 | |
|    request to run the filter for a path to spawn a single process, and
 | |
|    all filtering is served by this single process for multiple
 | |
|    paths, reducing the process creation overhead.
 | |
| 
 | |
|  * The user always has to say "stash@{$N}" when naming a single
 | |
|    element in the default location of the stash, i.e. reflogs in
 | |
|    refs/stash.  The "git stash" command learned to accept "git stash
 | |
|    apply 4" as a short-hand for "git stash apply stash@{4}".
 | |
| 
 | |
| 
 | |
| Performance, Internal Implementation, Development Support etc.
 | |
| 
 | |
|  * The delta-base-cache mechanism has been a key to the performance in
 | |
|    a repository with a tightly packed packfile, but it did not scale
 | |
|    well even with a larger value of core.deltaBaseCacheLimit.
 | |
| 
 | |
|  * Enhance "git status --porcelain" output by collecting more data on
 | |
|    the state of the index and the working tree files, which may
 | |
|    further be used to teach git-prompt (in contrib/) to make fewer
 | |
|    calls to git.
 | |
| 
 | |
|  * Extract a small helper out of the function that reads the authors
 | |
|    script file "git am" internally uses.
 | |
|    (merge a77598e jc/am-read-author-file later to maint).
 | |
| 
 | |
|  * Lift calls to exit(2) and die() higher in the callchain in
 | |
|    sequencer.c files so that more helper functions in it can be used
 | |
|    by callers that want to handle error conditions themselves.
 | |
| 
 | |
|  * "git am" has been taught to make an internal call to "git apply"'s
 | |
|    innards without spawning the latter as a separate process.
 | |
| 
 | |
|  * The ref-store abstraction was introduced to the refs API so that we
 | |
|    can plug in different backends to store references.
 | |
| 
 | |
|  * The "unsigned char sha1[20]" to "struct object_id" conversion
 | |
|    continues.  Notable changes in this round includes that ce->sha1,
 | |
|    i.e. the object name recorded in the cache_entry, turns into an
 | |
|    object_id.
 | |
| 
 | |
|  * JGit can show a fake ref "capabilities^{}" to "git fetch" when it
 | |
|    does not advertise any refs, but "git fetch" was not prepared to
 | |
|    see such an advertisement.  When the other side disconnects without
 | |
|    giving any ref advertisement, we used to say "there may not be a
 | |
|    repository at that URL", but we may have seen other advertisements
 | |
|    like "shallow" and ".have" in which case we definitely know that a
 | |
|    repository is there.  The code to detect this case has also been
 | |
|    updated.
 | |
| 
 | |
|  * Some codepaths in "git pack-objects" were not ready to use an
 | |
|    existing pack bitmap; now they are and as a result they have
 | |
|    become faster.
 | |
| 
 | |
|  * The codepath in "git fsck" to detect malformed tree objects has
 | |
|    been updated not to die but keep going after detecting them.
 | |
| 
 | |
|  * We call "qsort(array, nelem, sizeof(array[0]), fn)", and most of
 | |
|    the time third parameter is redundant.  A new QSORT() macro lets us
 | |
|    omit it.
 | |
| 
 | |
|  * "git pack-objects" in a repository with many packfiles used to
 | |
|    spend a lot of time looking for/at objects in them; the accesses to
 | |
|    the packfiles are now optimized by checking the most-recently-used
 | |
|    packfile first.
 | |
|    (merge c9af708b1a jk/pack-objects-optim-mru later to maint).
 | |
| 
 | |
|  * Codepaths involved in interacting alternate object stores have
 | |
|    been cleaned up.
 | |
| 
 | |
|  * In order for the receiving end of "git push" to inspect the
 | |
|    received history and decide to reject the push, the objects sent
 | |
|    from the sending end need to be made available to the hook and
 | |
|    the mechanism for the connectivity check, and this was done
 | |
|    traditionally by storing the objects in the receiving repository
 | |
|    and letting "git gc" expire them.  Instead, store the newly
 | |
|    received objects in a temporary area, and make them available by
 | |
|    reusing the alternate object store mechanism to them only while we
 | |
|    decide if we accept the check, and once we decide, either migrate
 | |
|    them to the repository or purge them immediately.
 | |
| 
 | |
|  * The require_clean_work_tree() helper was recreated in C when "git
 | |
|    pull" was rewritten from shell; the helper is now made available to
 | |
|    other callers in preparation for upcoming "rebase -i" work.
 | |
| 
 | |
|  * "git upload-pack" had its code cleaned-up and performance improved
 | |
|    by reducing use of timestamp-ordered commit-list, which was
 | |
|    replaced with a priority queue.
 | |
| 
 | |
|  * "git diff --no-index" codepath has been updated not to try to peek
 | |
|    into a .git/ directory that happens to be under the current
 | |
|    directory, when we know we are operating outside any repository.
 | |
| 
 | |
|  * Update of the sequencer codebase to make it reusable to reimplement
 | |
|    "rebase -i" continues.
 | |
| 
 | |
|  * Git generally does not explicitly close file descriptors that were
 | |
|    open in the parent process when spawning a child process, but most
 | |
|    of the time the child does not want to access them. As Windows does
 | |
|    not allow removing or renaming a file that has a file descriptor
 | |
|    open, a slow-to-exit child can even break the parent process by
 | |
|    holding onto them.  Use O_CLOEXEC flag to open files in various
 | |
|    codepaths.
 | |
| 
 | |
|  * Update "interpret-trailers" machinery and teach it that people in
 | |
|    the real world write all sorts of cruft in the "trailer" that was
 | |
|    originally designed to have the neat-o "Mail-Header: like thing"
 | |
|    and nothing else.
 | |
| 
 | |
| 
 | |
| Also contains various documentation updates and code clean-ups.
 | |
| 
 | |
| 
 | |
| Fixes since v2.10
 | |
| -----------------
 | |
| 
 | |
| Unless otherwise noted, all the fixes since v2.9 in the maintenance
 | |
| track are contained in this release (see the maintenance releases'
 | |
| notes for details).
 | |
| 
 | |
|  * Clarify various ways to specify the "revision ranges" in the
 | |
|    documentation.
 | |
| 
 | |
|  * "diff-highlight" script (in contrib/) learned to work better with
 | |
|    "git log -p --graph" output.
 | |
| 
 | |
|  * The test framework left the number of tests and success/failure
 | |
|    count in the t/test-results directory, keyed by the name of the
 | |
|    test script plus the process ID.  The latter however turned out not
 | |
|    to serve any useful purpose.  The process ID part of the filename
 | |
|    has been removed.
 | |
| 
 | |
|  * Having a submodule whose ".git" repository is somehow corrupt
 | |
|    caused a few commands that recurse into submodules to loop forever.
 | |
| 
 | |
|  * "git symbolic-ref -d HEAD" happily removes the symbolic ref, but
 | |
|    the resulting repository becomes an invalid one.  Teach the command
 | |
|    to forbid removal of HEAD.
 | |
| 
 | |
|  * A test spawned a short-lived background process, which sometimes
 | |
|    prevented the test directory from getting removed at the end of the
 | |
|    script on some platforms.
 | |
| 
 | |
|  * Update a few tests that used to use GIT_CURL_VERBOSE to use the
 | |
|    newer GIT_TRACE_CURL.
 | |
| 
 | |
|  * "git pack-objects --include-tag" was taught that when we know that
 | |
|    we are sending an object C, we want a tag B that directly points at
 | |
|    C but also a tag A that points at the tag B.  We used to miss the
 | |
|    intermediate tag B in some cases.
 | |
| 
 | |
|  * Update Japanese translation for "git-gui".
 | |
| 
 | |
|  * "git fetch http::/site/path" did not die correctly and segfaulted
 | |
|    instead.
 | |
| 
 | |
|  * "git commit-tree" stopped reading commit.gpgsign configuration
 | |
|    variable that was meant for Porcelain "git commit" in Git 2.9; we
 | |
|    forgot to update "git gui" to look at the configuration to match
 | |
|    this change.
 | |
| 
 | |
|  * "git add --chmod={+,-}x" added recently lacked documentation, which has
 | |
|    been corrected.
 | |
| 
 | |
|  * "git log --cherry-pick" used to include merge commits as candidates
 | |
|    to be matched up with other commits, resulting a lot of wasted time.
 | |
|    The patch-id generation logic has been updated to ignore merges and
 | |
|    avoid the wastage.
 | |
| 
 | |
|  * The http transport (with curl-multi option, which is the default
 | |
|    these days) failed to remove curl-easy handle from a curlm session,
 | |
|    which led to unnecessary API failures.
 | |
| 
 | |
|  * There were numerous corner cases in which the configuration files
 | |
|    are read and used or not read at all depending on the directory a
 | |
|    Git command was run, leading to inconsistent behaviour.  The code
 | |
|    to set-up repository access at the beginning of a Git process has
 | |
|    been updated to fix them.
 | |
|    (merge 4d0efa1 jk/setup-sequence-update later to maint).
 | |
| 
 | |
|  * "git diff -W" output needs to extend the context backward to
 | |
|    include the header line of the current function and also forward to
 | |
|    include the body of the entire current function up to the header
 | |
|    line of the next one.  This process may have to merge two adjacent
 | |
|    hunks, but the code forgot to do so in some cases.
 | |
| 
 | |
|  * Performance tests done via "t/perf" did not use the right
 | |
|    build configuration if the user relied on autoconf generated
 | |
|    configuration.
 | |
| 
 | |
|  * "git format-patch --base=..." feature that was recently added
 | |
|    showed the base commit information after the "-- " e-mail signature
 | |
|    line, which turned out to be inconvenient.  The base information
 | |
|    has been moved above the signature line.
 | |
| 
 | |
|  * More i18n.
 | |
| 
 | |
|  * Even when "git pull --rebase=preserve" (and the underlying "git
 | |
|    rebase --preserve") can complete without creating any new commits
 | |
|    (i.e. fast-forwards), it still insisted on having usable ident
 | |
|    information (read: user.email is set correctly), which was less
 | |
|    than nice.  As the underlying commands used inside "git rebase"
 | |
|    would fail with a more meaningful error message and advice text
 | |
|    when the bogus ident matters, this extra check was removed.
 | |
| 
 | |
|  * "git gc --aggressive" used to limit the delta-chain length to 250,
 | |
|    which is way too deep for gaining additional space savings and is
 | |
|    detrimental for runtime performance.  The limit has been reduced to
 | |
|    50.
 | |
| 
 | |
|  * Documentation for individual configuration variables to control use
 | |
|    of color (like `color.grep`) said that their default value is
 | |
|    'false', instead of saying their default is taken from `color.ui`.
 | |
|    When we updated the default value for color.ui from 'false' to
 | |
|    'auto' quite a while ago, all of them broke.  This has been
 | |
|    corrected.
 | |
| 
 | |
|  * The pretty-format specifier "%C(auto)" used by the "log" family of
 | |
|    commands to enable coloring of the output is taught to also issue a
 | |
|    color-reset sequence to the output.
 | |
| 
 | |
|  * A shell script example in check-ref-format documentation has been
 | |
|    fixed.
 | |
| 
 | |
|  * "git checkout <word>" does not follow the usual disambiguation
 | |
|    rules when the <word> can be both a rev and a path, to allow
 | |
|    checking out a branch 'foo' in a project that happens to have a
 | |
|    file 'foo' in the working tree without having to disambiguate.
 | |
|    This was poorly documented and the check was incorrect when the
 | |
|    command was run from a subdirectory.
 | |
| 
 | |
|  * Some codepaths in "git diff" used regexec(3) on a buffer that was
 | |
|    mmap(2)ed, which may not have a terminating NUL, leading to a read
 | |
|    beyond the end of the mapped region.  This was fixed by introducing
 | |
|    a regexec_buf() helper that takes a <ptr,len> pair with REG_STARTEND
 | |
|    extension.
 | |
| 
 | |
|  * The procedure to build Git on Mac OS X for Travis CI hardcoded the
 | |
|    internal directory structure we assumed HomeBrew uses, which was a
 | |
|    no-no.  The procedure has been updated to ask HomeBrew things we
 | |
|    need to know to fix this.
 | |
| 
 | |
|  * When "git rebase -i" is given a broken instruction, it told the
 | |
|    user to fix it with "--edit-todo", but didn't say what the step
 | |
|    after that was (i.e. "--continue").
 | |
| 
 | |
|  * Documentation around tools to import from CVS was fairly outdated.
 | |
| 
 | |
|  * "git clone --recurse-submodules" lost the progress eye-candy in
 | |
|    a recent update, which has been corrected.
 | |
| 
 | |
|  * A low-level function verify_packfile() was meant to show errors
 | |
|    that were detected without dying itself, but under some conditions
 | |
|    it didn't and died instead, which has been fixed.
 | |
| 
 | |
|  * When "git fetch" tries to find where the history of the repository
 | |
|    it runs in has diverged from what the other side has, it has a
 | |
|    mechanism to avoid digging too deep into irrelevant side branches.
 | |
|    This however did not work well over the "smart-http" transport due
 | |
|    to a design bug, which has been fixed.
 | |
| 
 | |
|  * In the codepath that comes up with the hostname to be used in an
 | |
|    e-mail when the user didn't tell us, we looked at the ai_canonname
 | |
|    field in struct addrinfo without making sure it is not NULL first.
 | |
| 
 | |
|  * "git worktree", even though it used the default_abbrev setting that
 | |
|    ought to be affected by the core.abbrev configuration variable, ignored
 | |
|    the variable setting.  The command has been taught to read the
 | |
|    default set of configuration variables to correct this.
 | |
| 
 | |
|  * "git init" tried to record core.worktree in the repository's
 | |
|    'config' file when the GIT_WORK_TREE environment variable was set and
 | |
|    it was different from where GIT_DIR appears as ".git" at its top,
 | |
|    but the logic was faulty when .git is a "gitdir:" file that points
 | |
|    at the real place, causing trouble in working trees that are
 | |
|    managed by "git worktree".  This has been corrected.
 | |
| 
 | |
|  * Codepaths that read from an on-disk loose object were too loose in
 | |
|    validating that they are reading a proper object file and
 | |
|    sometimes read past the data they read from the disk, which has
 | |
|    been corrected.  H/t to Gustavo Grieco for reporting.
 | |
| 
 | |
|  * The original command line syntax for "git merge", which was "git
 | |
|    merge <msg> HEAD <parent>...", has been deprecated for quite some
 | |
|    time, and "git gui" was the last in-tree user of the syntax.  This
 | |
|    is finally fixed, so that we can move forward with the deprecation.
 | |
| 
 | |
|  * An author name that has a backslash-quoted double quote in the
 | |
|    human readable part ("My \"double quoted\" name"), was not unquoted
 | |
|    correctly while applying a patch from a piece of e-mail.
 | |
| 
 | |
|  * Doc update to clarify what "log -3 --reverse" does.
 | |
| 
 | |
|  * Almost everybody uses DEFAULT_ABBREV to refer to the default
 | |
|    setting for the abbreviation, but "git blame" peeked into
 | |
|    underlying variable bypassing the macro for no good reason.
 | |
| 
 | |
|  * The "graph" API used in "git log --graph" miscounted the number of
 | |
|    output columns consumed so far when drawing a padding line, which
 | |
|    has been fixed; this did not affect any existing code as nobody
 | |
|    tried to write anything after the padding on such a line, though.
 | |
| 
 | |
|  * The code that parses the format parameter of the for-each-ref command
 | |
|    has seen a micro-optimization.
 | |
| 
 | |
|  * When we started to use cURL to talk to an imap server, we forgot to explicitly add
 | |
|    imap(s):// before the destination.  To some folks, that didn't work
 | |
|    and the library tried to make HTTP(s) requests instead.
 | |
| 
 | |
|  * The ./configure script generated from configure.ac was taught how
 | |
|    to detect support of SSL by libcurl better.
 | |
| 
 | |
|  * The command-line completion script (in contrib/) learned to
 | |
|    complete "git cmd ^mas<HT>" to complete the negative end of
 | |
|    reference to "git cmd ^master".
 | |
|    (merge 49416ad22a cp/completion-negative-refs later to maint).
 | |
| 
 | |
|  * The existing "git fetch --depth=<n>" option was hard to use
 | |
|    correctly when making the history of an existing shallow clone
 | |
|    deeper.  A new option, "--deepen=<n>", has been added to make this
 | |
|    easier to use.  "git clone" also learned "--shallow-since=<date>"
 | |
|    and "--shallow-exclude=<tag>" options to make it easier to specify
 | |
|    "I am interested only in the recent N months worth of history" and
 | |
|    "Give me only the history since that version".
 | |
|    (merge cccf74e2da nd/shallow-deepen later to maint).
 | |
| 
 | |
|  * "git blame --reverse OLD path" is now DWIMmed to show how lines
 | |
|    in path in an old revision OLD have survived up to the current
 | |
|    commit.
 | |
|    (merge e1d09701a4 jc/blame-reverse later to maint).
 | |
| 
 | |
|  * The http.emptyauth configuration variable is a way to allow an empty username to
 | |
|    pass when attempting to authenticate using mechanisms like
 | |
|    Kerberos.  We took an unspecified (NULL) username and sent ":"
 | |
|    (i.e. no username, no password) to CURLOPT_USERPWD, but did not do
 | |
|    the same when the username is explicitly set to an empty string.
 | |
| 
 | |
|  * "git clone" of a local repository can be done at the filesystem
 | |
|    level, but the codepath did not check errors while copying and
 | |
|    adjusting the file that lists alternate object stores.
 | |
| 
 | |
|  * Documentation for "git commit" was updated to clarify that "commit
 | |
|    -p <paths>" adds to the current contents of the index to come up
 | |
|    with what to commit.
 | |
| 
 | |
|  * A stray symbolic link in the $GIT_DIR/refs/ directory could make name
 | |
|    resolution loop forever, which has been corrected.
 | |
| 
 | |
|  * The "submodule.<name>.path" stored in .gitmodules is never copied
 | |
|    to .git/config and such a key in .git/config has no meaning, but
 | |
|    the documentation described it next to submodule.<name>.url
 | |
|    as if both belong to .git/config.  This has been fixed.
 | |
| 
 | |
|  * In a worktree created via "git
 | |
|    worktree", "git checkout" attempts to protect users from confusion
 | |
|    by refusing to check out a branch that is already checked out in
 | |
|    another worktree.  However, this also prevented checking out a
 | |
|    branch which is designated as the primary branch of a bare
 | |
|    repository, in a worktree that is connected to the bare
 | |
|    repository.  The check has been corrected to allow it.
 | |
| 
 | |
|  * "git rebase" immediately after "git clone" failed to find the fork
 | |
|    point from the upstream.
 | |
| 
 | |
|  * When fetching from a remote that has many tags that are irrelevant
 | |
|    to branches we are following, we used to waste way too many cycles
 | |
|    checking if the object pointed at by a tag (that we are not
 | |
|    going to fetch!) exists in our repository too carefully.
 | |
| 
 | |
|  * Protect our code from over-eager compilers.
 | |
| 
 | |
|  * Recent git allows submodule.<name>.branch to use a special token
 | |
|    "." instead of the branch name; the documentation has been updated
 | |
|    to describe it.
 | |
| 
 | |
|  * "git send-email" attempts to pick up valid e-mails from the
 | |
|    trailers, but people in the real world write non-addresses there, like
 | |
|    "Cc: Stable <add@re.ss> # 4.8+", which broke the output depending
 | |
|    on the availability and vintage of the Mail::Address perl module.
 | |
|    (merge dcfafc5214 mm/send-email-cc-cruft-after-address later to maint).
 | |
| 
 | |
|  * The Travis CI configuration we ship ran the tests with the --verbose
 | |
|    option but this risks non-TAP output that happens to be "ok" to be
 | |
|    misinterpreted as TAP signalling a test that passed.  This resulted
 | |
|    in unnecessary failures.  This has been corrected by introducing a
 | |
|    new mode to run our tests in the test harness to send the verbose
 | |
|    output separately to the log file.
 | |
| 
 | |
|  * Some AsciiDoc formatters mishandle a displayed illustration with
 | |
|    tabs in it.  Adjust a few of them in merge-base documentation to
 | |
|    work around them.
 | |
| 
 | |
|  * Fixed a minor regression in "git submodule" that was introduced
 | |
|    when more helper functions were reimplemented in C.
 | |
|    (merge 77b63ac31e sb/submodule-ignore-trailing-slash later to maint).
 | |
| 
 | |
|  * The code that we have used for the past 10+ years to cycle
 | |
|    4-element ring buffers turns out to be not quite portable in
 | |
|    theoretical world.
 | |
|    (merge bb84735c80 rs/ring-buffer-wraparound later to maint).
 | |
| 
 | |
|  * "git daemon" used fixed-length buffers to turn URLs to the
 | |
|    repository the client asked for into the server side directory
 | |
|    paths, using snprintf() to avoid overflowing these buffers, but
 | |
|    allowed possibly truncated paths to the directory.  This has been
 | |
|    tightened to reject such a request that causes an overlong path to be
 | |
|    served.
 | |
|    (merge 6bdb0083be jk/daemon-path-ok-check-truncation later to maint).
 | |
| 
 | |
|  * Recent update to git-sh-setup (a library of shell functions that
 | |
|    are used by our in-tree scripted Porcelain commands) included
 | |
|    another shell library git-sh-i18n without specifying where it is,
 | |
|    relying on the $PATH.  This has been fixed to be more explicit by
 | |
|    prefixing with $(git --exec-path) output.
 | |
|    (merge 1073094f30 ak/sh-setup-dot-source-i18n-fix later to maint).
 | |
| 
 | |
|  * Fix for a racy false-positive test failure.
 | |
|    (merge fdf4f6c79b as/merge-attr-sleep later to maint).
 | |
| 
 | |
|  * Portability update and workaround for builds on recent Mac OS X.
 | |
|    (merge a296bc0132 ls/macos-update later to maint).
 | |
| 
 | |
|  * Using a %(HEAD) placeholder in "for-each-ref --format=" option
 | |
|    caused the command to segfault when on an unborn branch.
 | |
|    (merge 84679d470d jc/for-each-ref-head-segfault-fix later to maint).
 | |
| 
 | |
|  * "git rebase -i" did not work well with the core.commentchar
 | |
|    configuration variable for two reasons, both of which have been
 | |
|    fixed.
 | |
|    (merge 882cd23777 js/rebase-i-commentchar-fix later to maint).
 | |
| 
 | |
|  * Other minor doc, test and build updates and code cleanups.
 | |
|    (merge 5c238e29a8 jk/common-main later to maint).
 | |
|    (merge 5a5749e45b ak/pre-receive-hook-template-modefix later to maint).
 | |
|    (merge 6d834ac8f1 jk/rebase-config-insn-fmt-docfix later to maint).
 | |
|    (merge de9f7fa3b0 rs/commit-pptr-simplify later to maint).
 | |
|    (merge 4259d693fc sc/fmt-merge-msg-doc-markup-fix later to maint).
 | |
|    (merge 28fab7b23d nd/test-helpers later to maint).
 | |
|    (merge c2bb0c1d1e rs/cocci later to maint).
 | |
|    (merge 3285b7badb ps/common-info-doc later to maint).
 | |
|    (merge 2b090822e8 nd/worktree-lock later to maint).
 | |
|    (merge 4bd488ea7c jk/create-branch-remove-unused-param later to maint).
 | |
|    (merge 974e0044d6 tk/diffcore-delta-remove-unused later to maint).
 |