Git 2.4.5 发布,此版本更新内容如下:
* The setup code used to die when core.bare and core.worktree are set
 inconsistently, even for commands that do not need working tree.
* There was a dead code that used to handle “git pull –tags” and
 show special-cased error message
* “color.diff.plain” was a misnomer; give it ‘color.diff.context’ as
 a more logical synonym.
* The configuration reader/writer uses mmap(2) interface to access
 the files; when we find a directory, it barfed with “Out of memory?”.
* Recent “git prune” traverses young unreachable objects to safekeep
 old objects in the reachability chain from them, which sometimes
 showed unnecessary error messages that are alarming.
* “git rebase -i” fired post-rewrite hook when it shouldn’t (namely,
 when it was told to stop sequencing with ‘exec’ insn).
同时还包含常规修复,文档更新和代码清理。
下载:https://github.com/git/git/archive/v2.4.5.zip。
Git 2.5.0 RC0 发布,更新内容如下:
UI, Workflows & Features
* The bash completion script (in contrib/) learned a few options that
 “git revert” takes.
* Whitespace breakages in deleted and context lines can also be
 painted in the output of “git diff” and friends with the new
 –ws-error-highlight option.
* List of commands shown by “git help” are grouped along the workflow
 elements to help early learners.
* “git p4″ now detects the filetype (e.g. binary
 the files are opened exclusively.
* git p4 attempts to better handle branches in Perforce.
* “git p4″ learned “–changes-block-size <n>” to read the changes in
 chunks from Perforce, instead of making one call to “p4 changes”
 that may trigger “too many rows scanned” error from Perforce.
* More workaround for Perforce’s row number limit in “git p4″.
* Unlike “$EDITOR” and “$GIT_EDITOR” that can hold the path to the
 command and initial options (e.g. “/path/to/emacs -nw”), ‘git p4′
 did not let the shell interpolate the contents of the environment
 variable that name the editor “$P4EDITOR” (and “$EDITOR”, too).
 This release makes it in line with the rest of Git, as well as with
 Perforce.
* A new short-hand <branch>@{push} denotes the remote-tracking branch
 that tracks the branch at the remote the <branch> would be pushed
 to.
* “git show-branch –topics HEAD” (with no other arguments) did not
 do anything interesting.  Instead, contrast the given revision
 against all the local branches by default.
* A replacement for contrib/workdir/git-new-workdir that does not
 rely on symbolic links and make sharing of objects and refs safer
 by making the borrowee and borrowers aware of each other.
Consider this as still an experimental feature; the UI will likely
 to change.
* Tweak the sample “store” backend of the credential helper to honor
 XDG configuration file locations when specified.
* A heuristic we use to catch mistyped paths on the command line
 “git <cmd> <revs> <pathspec>” is to make sure that all the non-rev
 parameters in the later part of the command line are names of the
 files in the working tree, but that means “git grep $str — \*.c”
 must always be disambiguated with “–“, because nobody sane will
 create a file whose name literally is asterisk-dot-see.  Loosen the
 heuristic to declare that with a wildcard string the user likely
 meant to give us a pathspec.
* “git merge FETCH_HEAD” learned that the previous “git fetch” could
 be to create an Octopus merge, i.e. recording multiple branches
 that are not marked as “not-for-merge”; this allows us to lose an
 old style invocation “git merge <msg> HEAD $commits…” in the
 implementation of “git pull” script; the old style syntax can now
 be deprecated (but not removed yet).
* Filter scripts were run with SIGPIPE disabled on the Git side,
 expecting that they may not read what Git feeds them to filter.
 We however treated a filter that does not read its input fully
 before exiting as an error.  We no longer do and ignore EPIPE
 when writing to feed the filter scripts.
This changes semantics, but arguably in a good way.  If a filter
 can produce its output without fully consuming its input using
 whatever magic, we now let it do so, instead of diagnosing it
 as a programming error.
* Instead of dying immediately upon failing to obtain a lock, the
 locking (of refs etc) retries after a short while with backoff.
* Introduce http.<url>.SSLCipherList configuration variable to tweak
 the list of cipher suite to be used with libcURL when talking with
 https:// sites.
* “git subtree” script (in contrib/) used “echo -n” to produce
 progress messages in a non-portable way.
* “git subtree” script (in contrib/) does not have –squash option
 when pushing, but the documentation and help text pretended as if
 it did.
* The Git subcommand completion (in contrib/) no longer lists credential
 helpers among candidates; they are not something the end user would
 invoke interactively.
* The index file can be taught with “update-index –untracked-cache”
 to optionally remember already seen untracked files, in order to
 speed up “git status” in a working tree with tons of cruft.
* “git mergetool” learned to drive WinMerge as a backend.
* “git upload-pack” that serves “git fetch” can be told to serve
 commits that are not at the tip of any ref, as long as they are
 reachable from a ref, with uploadpack.allowReachableSHA1InWant
 configuration variable.
* “git cat-file –batch(-check)” learned the “–follow-symlinks”
 option that follows an in-tree symbolic link when asked about an
 object via extended SHA-1 syntax, e.g. HEAD:RelNotes that points at
 Documentation/RelNotes/2.5.0.txt.  With the new option, the command
 behaves as if HEAD:Documentation/RelNotes/2.5.0.txt was given as
 input instead.
Consider this as still an experimental and incomplete feature:
– We may want to do the same for in-index objects, e.g.
 asking for :RelNotes with this option should give
 :Documentation/RelNotes/2.5.0.txt, too
– “git cat-file –follow-symlinks blob HEAD:RelNotes”
 may also be something we want to allow in the future.
* “git send-email” learned the alias file format used by the sendmail
 program (in a simplified form; we obviously do not feed pipes).
* “git am” learned am.threeWay configuration variable.
* Traditionally, external low-level 3-way merge drivers are expected
 to produce their results based solely on the contents of the three
 variants given in temporary files named by %O, %A and %B on their
 command line.  Additionally allow them to look at the final path
 (given by %P).
* “git blame” learned blame.showEmail configuration variable.
* “git apply” cannot diagnose a patch corruption when the breakage is
 to mark the length of the hunk shorter than it really is on the
 hunk header line “@@ -l,k +m,n @@”; one special case it could is
 when the hunk becomes no-op (e.g. k == n == 2 for two-line context
 patch output), and it learned to do so in this special case.
* Add the “–allow-unknown-type” option to “cat-file” to allow
 inspecting loose objects of an experimental or a broken type.
* Many long-running operations show progress eye-candy, even when
 they are later backgrounded.  Hide the eye-candy when the process
 is sent to the background instead.
 (merge a4fb76c lm/squelch-bg-progress later to maint).
Performance, Internal Implementation, Development Support etc.
* “unsigned char [20]” used throughout the code to represent object
 names are being converted into a semi-opaque “struct object_id”.
 This effort is expected to interfere with other topics in flight,
 but hopefully will give us one extra level of abstraction in the
 end, when completed.
* for_each_ref() callback functions were taught to name the objects
 not with “unsigned char sha1[20]” but with “struct object_id”.
* Catch a programmer mistake to feed a pointer not an array to
 ARRAY_SIZE() macro, by using a couple of GCC extensions.
* Some error messages in “git config” were emitted without calling
 the usual error() facility.
* When “add–interactive” splits a hunk into two overlapping hunks
 and then let the user choose only one, it sometimes feeds an
 incorrect patch text to “git apply”.  Add tests to demonstrate
 this.
I have a slight suspicion that this may be $gmane/87202 coming back
 and biting us (I seem to have said “let’s run with this and see
 what happens” back then).
* More line-ending tests.
* An earlier rewrite to use strbuf_getwholeline() instead of fgets(3)
 to read packed-refs file revealed that the former is unacceptably
 inefficient.  It has been optimized by using getdelim(3) when
 available.
* The refs API uses ref_lock struct which had its own “int fd”, even
 though the same file descriptor was in the lock struct it contains.
 Clean-up the code to lose this redundant field.
* There was a dead code that used to handle “git pull –tags” and
 show special-cased error message, which was made irrelevant when
 the semantics of the option changed back in Git 1.9 days.
 (merge 19d122b pt/pull-tags-error-diag later to maint).
* Help us to find broken test script that splits the body part of the
 test by mistaken use of wrong kind of quotes.
 (merge d93d5d5 jc/test-prereq-validate later to maint).
* Developer support to automatically detect broken &&-chain in the
 test scripts is now turned on by default.
 (merge 92b269f jk/test-chain-lint later to maint).
* Error reporting mechanism used in “refs” API has been made more
 consistent.
* “git pull” has more test coverage now.
* “git pull” has become more aware of the options meant for
 underlying “git fetch” and then learned to use parse-options
 parser.
此外还有各种文档更新和代码清理。详细改进请看更新日志。
下载:https://github.com/git/git/archive/v2.5.0-rc0.zip。









