跳转到主要内容

1.5.5

GIT v1.5.5 Release Notes ========================

Updates since v1.5.4 --------------------

(subsystems)

  • Comes with git-gui 0.10.1

(portability)

  • We shouldn’t ask for BSD group ownership semantics by setting g+s bit on directories on older BSD systems that refuses chmod() by non root users. BSD semantics is the default there anyway.
  • Bunch of portability improvement patches coming from an effort to port to Solaris has been applied.

(performance)

  • On platforms with suboptimal qsort(3) implementation, there is an option to use more reasonable substitute we ship with our software.
  • New configuration variable "pack.packsizelimit" can be used in place of command line option --max-pack-size.
  • "git fetch" over the native git protocol used to make a connection to find out the set of current remote refs and another to actually download the pack data. We now use only one connection for these tasks.
  • "git commit" does not run lstat(2) more than necessary anymore.

(usability, bells and whistles)

  • Bash completion script (in contrib) are aware of more commands and options.
  • You can be warned when core.autocrlf conversion is applied in such a way that results in an irreversible conversion.
  • A catch-all "color.ui" configuration variable can be used to enable coloring of all color-capable commands, instead of individual ones such as "color.status" and "color.branch".
  • The commands refused to take absolute pathnames where they require pathnames relative to the work tree or the current subdirectory. They now can take absolute pathnames in such a case as long as the pathnames do not refer outside of the work tree. E.g. "git add $(pwd)/foo" now works.
  • Error messages used to be sent to stderr, only to get hidden, when $PAGER was in use. They now are sent to stdout along with the command output to be shown in the $PAGER.
  • A pattern "foo/" in .gitignore file now matches a directory "foo". Pattern "foo" also matches as before.
  • bash completion’s prompt helper function can talk about operation in-progress (e.g. merge, rebase, etc.).
  • Configuration variables "url.<usethis>.insteadof = <otherurl>" can be used to tell "git-fetch" and "git-push" to use different URL than what is given from the command line.
  • "git add -i" behaves better even before you make an initial commit.
  • "git am" refused to run from a subdirectory without a good reason.
  • After "git apply --whitespace=fix" fixes whitespace errors in a patch, a line before the fix can appear as a context or preimage line in a later patch, causing the patch not to apply. The command now knows to see through whitespace fixes done to context lines to successfully apply such a patch series.
  • "git branch" (and "git checkout -b") to branch from a local branch can optionally set "branch.<name>.merge" to mark the new branch to build on the other local branch, when "branch.autosetupmerge" is set to "always", or when passing the command line option "--track" (this option was ignored when branching from local branches). By default, this does not happen when branching from a local branch.
  • "git checkout" to switch to a branch that has "branch.<name>.merge" set (i.e. marked to build on another branch) reports how much the branch and the other branch diverged.
  • When "git checkout" has to update a lot of paths, it used to be silent for 4 seconds before it showed any progress report. It is now a bit more impatient and starts showing progress report early.
  • "git commit" learned a new hook "prepare-commit-msg" that can inspect what is going to be committed and prepare the commit log message template to be edited.
  • "git cvsimport" can now take more than one -M options.
  • "git describe" learned to limit the tags to be used for naming with --match option.
  • "git describe --contains" now barfs when the named commit cannot be described.
  • "git describe --exact-match" describes only commits that are tagged.
  • "git describe --long" describes a tagged commit as $tag-0-$sha1, instead of just showing the exact tagname.
  • "git describe" warns when using a tag whose name and path contradict with each other.
  • "git diff" learned "--relative" option to limit and output paths relative to the current directory when working in a subdirectory.
  • "git diff" learned "--dirstat" option to show birds-eye-summary of changes more concisely than "--diffstat".
  • "git format-patch" learned --cover-letter option to generate a cover letter template.
  • "git gc" learned --quiet option.
  • "git gc" now automatically prunes unreachable objects that are two weeks old or older.
  • "git gc --auto" can be disabled more easily by just setting gc.auto to zero. It also tolerates more packfiles by default.
  • "git grep" now knows "--name-only" is a synonym for the "-l" option.
  • "git help <alias>" now reports "’git <alias>’ is alias to <what>", instead of saying "No manual entry for git-<alias>".
  • "git help" can use different backends to show manual pages and this can be configured using "man.viewer" configuration.
  • "gitk" does not restore window position from $HOME/.gitk anymore (it still restores the size).
  • "git log --grep=<what>" learned "--fixed-strings" option to look for <what> without treating it as a regular expression.
  • "git gui" learned an auto-spell checking.
  • "git push <somewhere> HEAD" and "git push <somewhere> +HEAD" works as expected; they push the current branch (and only the current branch). In addition, HEAD can be written as the value of "remote.<there>.push" configuration variable.
  • When the configuration variable "pack.threads" is set to 0, "git repack" auto detects the number of CPUs and uses that many threads.
  • "git send-email" learned to prompt for passwords interactively.
  • "git send-email" learned an easier way to suppress CC recipients.
  • "git stash" learned "pop" command, that applies the latest stash and removes it from the stash, and "drop" command to discard the named stash entry.
  • "git submodule" learned a new subcommand "summary" to show the symmetric difference between the HEAD version and the work tree version of the submodule commits.
  • Various "git cvsimport", "git cvsexportcommit", "git cvsserver", "git svn" and "git p4" improvements.

(internal)

  • Duplicated code between git-help and git-instaweb that launches user’s preferred browser has been refactored.
  • It is now easier to write test scripts that records known breakages.
  • "git checkout" is rewritten in C.
  • "git remote" is rewritten in C.
  • Two conflict hunks that are separated by a very short span of common lines are now coalesced into one larger hunk, to make the result easier to read.
  • Run-command API’s use of file descriptors is documented clearer and is more consistent now.
  • diff output can be sent to FILE * that is different from stdout. This will help reimplementing more things in C.

Fixes since v1.5.4 ------------------

All of the fixes in v1.5.4 maintenance series are included in this release, unless otherwise noted.

  • "git-http-push" did not allow deletion of remote ref with the usual "push <remote> :<branch>" syntax.
  • "git-rebase --abort" did not go back to the right location if "git-reset" was run during the "git-rebase" session.
  • "git imap-send" without setting imap.host did not error out but segfaulted.