313 lines
		
	
	
	
		
			13 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			313 lines
		
	
	
	
		
			13 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
Git v2.2 Release Notes
 | 
						|
======================
 | 
						|
 | 
						|
Updates since v2.1
 | 
						|
------------------
 | 
						|
 | 
						|
Ports
 | 
						|
 | 
						|
 * Building on older MacOS X systems automatically sets
 | 
						|
   the necessary NO_APPLE_COMMON_CRYPTO build-time option.
 | 
						|
 | 
						|
 * Building with NO_PTHREADS has been resurrected.
 | 
						|
 | 
						|
 * Compilation options have been updated a bit to better support the
 | 
						|
   z/OS port.
 | 
						|
 | 
						|
 | 
						|
UI, Workflows & Features
 | 
						|
 | 
						|
 * "git archive" learned to filter what gets archived with a pathspec.
 | 
						|
 | 
						|
 * "git config --edit --global" starts from a skeletal per-user
 | 
						|
   configuration file contents, instead of a total blank, when the
 | 
						|
   user does not already have any global config.  This immediately
 | 
						|
   reduces the need to later ask "Have you forgotten to set
 | 
						|
   core.user?", and we can add more to the template as we gain
 | 
						|
   more experience.
 | 
						|
 | 
						|
 * "git stash list -p" used to be almost always a no-op because each
 | 
						|
   stash entry is represented as a merge commit.  It learned to show
 | 
						|
   the difference between the base commit version and the working tree
 | 
						|
   version, which is in line with what "git stash show" gives.
 | 
						|
 | 
						|
 * Sometimes users want to report a bug they experience on their
 | 
						|
   repository, but they are not at liberty to share the contents of
 | 
						|
   the repository.  "fast-export" was taught an "--anonymize" option
 | 
						|
   to replace blob contents, names of people, paths and log
 | 
						|
   messages with bland and simple strings to help them.
 | 
						|
 | 
						|
 * "git difftool" learned an option to stop feeding paths to the
 | 
						|
   diff backend when it exits with a non-zero status.
 | 
						|
 | 
						|
 * "git grep" learned to paint (or not paint) partial matches on
 | 
						|
   context lines when showing "grep -C<num>" output in color.
 | 
						|
 | 
						|
 * "log --date=iso" uses a slight variant of the ISO 8601 format that is
 | 
						|
   more human readable.  A new "--date=iso-strict" option gives
 | 
						|
   datetime output that conforms more strictly.
 | 
						|
 | 
						|
 * The logic "git prune" uses is more resilient against various corner
 | 
						|
   cases.
 | 
						|
 | 
						|
 * A broken reimplementation of Git could write an invalid index that
 | 
						|
   records both stage #0 and higher-stage entries for the same path.
 | 
						|
   We now notice and reject such an index, as there is no sensible
 | 
						|
   fallback (we do not know if the broken tool wanted to resolve and
 | 
						|
   forgot to remove the higher-stage entries, or if it wanted to unresolve
 | 
						|
   and forgot to remove the stage #0 entry).
 | 
						|
 | 
						|
 * The temporary files "git mergetool" uses are renamed to avoid too
 | 
						|
   many dots in them (e.g. a temporary file for "hello.c" used to be
 | 
						|
   named e.g. "hello.BASE.4321.c" but now uses underscore instead,
 | 
						|
   e.g. "hello_BASE_4321.c", to allow us to have multiple variants).
 | 
						|
 | 
						|
 * The temporary files "git mergetool" uses can be placed in a newly
 | 
						|
   created temporary directory, instead of the current directory, by
 | 
						|
   setting the mergetool.writeToTemp configuration variable.
 | 
						|
 | 
						|
 * "git mergetool" understands "--tool bc" now, as version 4 of
 | 
						|
   BeyondCompare can be driven the same way as its version 3 and it
 | 
						|
   feels awkward to say "--tool bc3" to run version 4.
 | 
						|
 | 
						|
 * The "pre-receive" and "post-receive" hooks are no longer required
 | 
						|
   to consume their input fully (not following this requirement used
 | 
						|
   to result in intermittent errors in "git push").
 | 
						|
 | 
						|
 * The pretty-format specifier "%d", which expands to " (tagname)"
 | 
						|
   for a tagged commit, gained a cousin "%D" that just gives the
 | 
						|
   "tagname" without frills.
 | 
						|
 | 
						|
 * "git push" learned "--signed" push, that allows a push (i.e.
 | 
						|
   request to update the refs on the other side to point at a new
 | 
						|
   history, together with the transmission of necessary objects) to be
 | 
						|
   signed, so that it can be verified and audited, using the GPG
 | 
						|
   signature of the person who pushed, that the tips of branches at a
 | 
						|
   public repository really point the commits the pusher wanted to,
 | 
						|
   without having to "trust" the server.
 | 
						|
 | 
						|
 * "git interpret-trailers" is a new filter to programmatically edit
 | 
						|
   the tail end of the commit log messages, e.g. "Signed-off-by:".
 | 
						|
 | 
						|
 * "git help everyday" shows the "Everyday Git in 20 commands or so"
 | 
						|
   document, whose contents have been updated to match more modern
 | 
						|
   Git practice.
 | 
						|
 | 
						|
 * On the "git svn" front, work progresses to reduce memory consumption and
 | 
						|
   to improve handling of mergeinfo.
 | 
						|
 | 
						|
 | 
						|
Performance, Internal Implementation, Development Support etc.
 | 
						|
 | 
						|
 * The API to manipulate the "refs" has been restructured to make it
 | 
						|
   more transactional, with the eventual goal to allow all-or-none
 | 
						|
   atomic updates and migrating the storage to something other than
 | 
						|
   the traditional filesystem based one (e.g. databases).
 | 
						|
 | 
						|
 * The lockfile API and its users have been cleaned up.
 | 
						|
 | 
						|
 * We no longer attempt to keep track of individual dependencies to
 | 
						|
   the header files in the build procedure, relying instead on automated
 | 
						|
   dependency generation support from modern compilers.
 | 
						|
 | 
						|
 * In tests, we have been using NOT_{MINGW,CYGWIN} test prerequisites
 | 
						|
   long before negated prerequisites e.g. !MINGW were invented.
 | 
						|
   The former has been converted to the latter to avoid confusion.
 | 
						|
 | 
						|
 * Optimized looking up a remote's configuration in a repository with very many
 | 
						|
   remotes defined.
 | 
						|
 | 
						|
 * There are cases where you lock and open to write a file, close it
 | 
						|
   to show the updated contents to an external processes, and then have
 | 
						|
   to update the file again while still holding the lock; now the
 | 
						|
   lockfile API has support for such an access pattern.
 | 
						|
 | 
						|
 * The API to allocate the structure to keep track of commit
 | 
						|
   decoration has been updated to make it less cumbersome to use.
 | 
						|
 | 
						|
 * An in-core caching layer to let us avoid reading the same
 | 
						|
   configuration files several times has been added.  A few commands
 | 
						|
   have been converted to use this subsystem.
 | 
						|
 | 
						|
 * Various code paths have been cleaned up and simplified by using
 | 
						|
   the "strbuf", "starts_with()", and "skip_prefix()" APIs more.
 | 
						|
 | 
						|
 * A few codepaths that died when large blobs that would not fit in
 | 
						|
   core are involved in their operation have been taught to punt
 | 
						|
   instead, by e.g. marking a too-large blob as not to be diffed.
 | 
						|
 | 
						|
 * A few more code paths in "commit" and "checkout" have been taught
 | 
						|
   to repopulate the cache-tree in the index, to help speed up later
 | 
						|
   "write-tree" (used in "commit") and "diff-index --cached" (used in
 | 
						|
   "status").
 | 
						|
 | 
						|
 * A common programming mistake to assign the same short option name
 | 
						|
   to two separate options is detected by the parse_options() API to help
 | 
						|
   developers.
 | 
						|
 | 
						|
 * The code path to write out the packed-refs file has been optimized,
 | 
						|
   which especially matters in a repository with a large number of
 | 
						|
   refs.
 | 
						|
 | 
						|
 * The check to see if a ref $F can be created by making sure no
 | 
						|
   existing ref has $F/ as its prefix has been optimized, which
 | 
						|
   especially matters in a repository with a large number of existing
 | 
						|
   refs.
 | 
						|
 | 
						|
 * "git fsck" was taught to check the contents of tag objects a bit more.
 | 
						|
 | 
						|
 * "git hash-object" was taught a "--literally" option to help
 | 
						|
   debugging.
 | 
						|
 | 
						|
 * When running a required clean filter, we do not have to mmap the
 | 
						|
   original before feeding the filter.  Instead, stream the file
 | 
						|
   contents directly to the filter and process its output.
 | 
						|
 | 
						|
 * The scripts in the test suite can be run with the "-x" option to show
 | 
						|
   a shell-trace of each command they run.
 | 
						|
 | 
						|
 * The "run-command" API learned to manage the argv and environment
 | 
						|
   arrays for child process, alleviating the need for the callers to
 | 
						|
   allocate and deallocate them.
 | 
						|
 | 
						|
 * Some people use AsciiDoctor, instead of AsciiDoc, to format our
 | 
						|
   documentation set; the documentation has been adjusted to be usable
 | 
						|
   by both, as AsciiDoctor is pickier than AsciiDoc about its input
 | 
						|
   mark-up.
 | 
						|
 | 
						|
 | 
						|
Also contains various documentation updates and code clean-ups.
 | 
						|
 | 
						|
 | 
						|
Fixes since v2.1
 | 
						|
----------------
 | 
						|
 | 
						|
Unless otherwise noted, all the fixes since v2.1 in the maintenance
 | 
						|
track are contained in this release (see the maintenance releases'
 | 
						|
notes for details).
 | 
						|
 | 
						|
 * "git log --pretty/format=" with an empty format string did not
 | 
						|
   mean the more obvious "No output whatsoever" but "Use default
 | 
						|
   format", which was counterintuitive.
 | 
						|
 | 
						|
 * "git -c section.var command" and "git -c section.var= command"
 | 
						|
   should pass the configuration value differently (the former should be a
 | 
						|
   boolean true, the latter should be an empty string).
 | 
						|
 | 
						|
 * Applying a patch not generated by Git in a subdirectory used to
 | 
						|
   check for whitespace breakage using the attributes of incorrect
 | 
						|
   paths. Also whitespace checks were performed even for paths
 | 
						|
   excluded via the "git apply --exclude=<path>" mechanism.
 | 
						|
 | 
						|
 * "git bundle create" with a date-range specification was meant to
 | 
						|
   exclude tags outside the range, but it didn't.
 | 
						|
 | 
						|
 * "git add x" where x used to be a directory and is now a
 | 
						|
   symbolic link to a directory misbehaved.
 | 
						|
 | 
						|
 * The prompt script checked the $GIT_DIR/ref/stash file to see if there
 | 
						|
   is a stash, which was a no-no.
 | 
						|
 | 
						|
 * Pack-protocol documentation had a minor typo.
 | 
						|
 | 
						|
 * "git checkout -m" did not switch to another branch while carrying
 | 
						|
   the local changes forward when a path was deleted from the index.
 | 
						|
 | 
						|
 * "git daemon" (with NO_IPV6 build configuration) used to incorrectly
 | 
						|
   use the hostname even when gethostbyname() reported that the given
 | 
						|
   hostname is not found.
 | 
						|
   (merge 107efbe rs/daemon-fixes later to maint).
 | 
						|
 | 
						|
 * With sufficiently long refnames, "git fast-import" could have
 | 
						|
   overflowed an on-stack buffer.
 | 
						|
 | 
						|
 * After "pack-refs --prune" packed refs at the top-level, it failed
 | 
						|
   to prune them.
 | 
						|
 | 
						|
 * Progress output from "git gc --auto" was visible in "git fetch -q".
 | 
						|
 | 
						|
 * We used to pass -1000 to poll(2), expecting it to also mean "no
 | 
						|
   timeout", which should be spelled as -1.
 | 
						|
 | 
						|
 * "git rebase" documentation was unclear that it is required to
 | 
						|
   specify on what <upstream> the rebase is to be done when telling it
 | 
						|
   to first check out <branch>.
 | 
						|
   (merge 95c6826 so/rebase-doc later to maint).
 | 
						|
 | 
						|
 * "git push" over HTTP transport had an artificial limit on the number of
 | 
						|
   refs that can be pushed, imposed by the command line length.
 | 
						|
   (merge 26be19b jk/send-pack-many-refspecs later to maint).
 | 
						|
 | 
						|
 * When receiving an invalid pack stream that records the same object
 | 
						|
   twice, multiple threads got confused due to a race.
 | 
						|
   (merge ab791dd jk/index-pack-threading-races later to maint).
 | 
						|
 | 
						|
 * An attempt to remove the entire tree in the "git fast-import" input
 | 
						|
   stream caused it to misbehave.
 | 
						|
   (merge 2668d69 mb/fast-import-delete-root later to maint).
 | 
						|
 | 
						|
 * Reachability check (used in "git prune" and friends) did not add a
 | 
						|
   detached HEAD as a starting point to traverse objects still in use.
 | 
						|
   (merge c40fdd0 mk/reachable-protect-detached-head later to maint).
 | 
						|
 | 
						|
 * "git config --add section.var val" when section.var already has an
 | 
						|
   empty-string value used to lose the empty-string value.
 | 
						|
   (merge c1063be ta/config-add-to-empty-or-true-fix later to maint).
 | 
						|
 | 
						|
 * "git fsck" failed to report that it found corrupt objects via its
 | 
						|
   exit status in some cases.
 | 
						|
   (merge 30d1038 jk/fsck-exit-code-fix later to maint).
 | 
						|
 | 
						|
 * Use of the "--verbose" option used to break "git branch --merged".
 | 
						|
   (merge 12994dd jk/maint-branch-verbose-merged later to maint).
 | 
						|
 | 
						|
 * Some MUAs mangle a line in a message that begins with "From " to
 | 
						|
   ">From " when writing to a mailbox file, and feeding such an input
 | 
						|
   to "git am" used to lose such a line.
 | 
						|
   (merge 85de86a jk/mbox-from-line later to maint).
 | 
						|
 | 
						|
 * "rev-parse --verify --quiet $name" is meant to quietly exit with a
 | 
						|
   non-zero status when $name is not a valid object name, but still
 | 
						|
   gave error messages in some cases.
 | 
						|
 | 
						|
 * A handful of C source files have been updated to include
 | 
						|
   "git-compat-util.h" as the first thing, to conform better to our
 | 
						|
   coding guidelines.
 | 
						|
   (merge 1c4b660 da/include-compat-util-first-in-c later to maint).
 | 
						|
 | 
						|
 * The t7004 test, which tried to run Git with small stack space, has been
 | 
						|
   updated to use a bit larger stack to avoid false breakage on some
 | 
						|
   platforms.
 | 
						|
   (merge b9a1907 sk/tag-contains-wo-recursion later to maint).
 | 
						|
 | 
						|
 * A few documentation pages had example sections marked up not quite
 | 
						|
   correctly, which passed AsciiDoc but failed with AsciiDoctor.
 | 
						|
   (merge c30c43c bc/asciidoc-pretty-formats-fix later to maint).
 | 
						|
   (merge f8a48af bc/asciidoc later to maint).
 | 
						|
 | 
						|
 * "gitweb" used deprecated CGI::startfrom, which was removed from
 | 
						|
   CGI.pm as of 4.04; use CGI::start_from instead.
 | 
						|
   (merge 4750f4b rm/gitweb-start-form later to maint).
 | 
						|
 | 
						|
 * Newer versions of 'meld' break the auto-detection we use to see if
 | 
						|
   they are new enough to support the `--output` option.
 | 
						|
   (merge b12d045 da/mergetool-meld later to maint).
 | 
						|
 | 
						|
 * "git pack-objects" forgot to disable the codepath to generate the
 | 
						|
   object reachability bitmap when it needs to split the resulting
 | 
						|
   pack.
 | 
						|
   (merge 2113471 jk/pack-objects-no-bitmap-when-splitting later to maint).
 | 
						|
 | 
						|
 * The code to use cache-tree trusted the on-disk data too much and
 | 
						|
   fell into an infinite loop upon seeing an incorrectly recorded
 | 
						|
   index file.
 | 
						|
   (merge 729dbbd jk/cache-tree-protect-from-broken-libgit2 later to maint).
 | 
						|
 | 
						|
 * "git fetch" into a repository where branch B was deleted earlier,
 | 
						|
   back when it had reflog enabled, and then branch B/C is fetched
 | 
						|
   into it without reflog enabled, which is arguably an unlikely
 | 
						|
   corner case, unnecessarily failed.
 | 
						|
   (merge aae828b jk/fetch-reflog-df-conflict later to maint).
 | 
						|
 | 
						|
 * "git log --first-parent -L..." used to crash.
 | 
						|
   (merge a8787c5 tm/line-log-first-parent later to maint).
 |