| GIT v1.5.1 Release Notes | |
| ======================== | |
| Updates since v1.5.0 | |
| -------------------- | |
| * Deprecated commands and options. | |
| - git-diff-stages and git-resolve have been removed. | |
| * New commands and options. | |
| - "git log" and friends take --reverse, which instructs them | |
| to give their output in the order opposite from their usual. | |
| They typically output from new to old, but with this option | |
| their output would read from old to new. "git shortlog" | |
| usually lists older commits first, but with this option, | |
| they are shown from new to old. | |
| - "git log --pretty=format:<string>" to allow more flexible | |
| custom log output. | |
| - "git diff" learned --ignore-space-at-eol. This is a weaker | |
| form of --ignore-space-change. | |
| - "git diff --no-index pathA pathB" can be used as diff | |
| replacement with git specific enhancements. | |
| - "git diff --no-index" can read from '-' (standard input). | |
| - "git diff" also learned --exit-code to exit with non-zero | |
| status when it found differences. In the future we might | |
| want to make this the default but that would be a rather big | |
| backward incompatible change; it will stay as an option for | |
| now. | |
| - "git diff --quiet" is --exit-code with output turned off, | |
| meant for scripted use to quickly determine if there is any | |
| tree-level difference. | |
| - Textual patch generation with "git diff" without -w/-b | |
| option has been significantly optimized. "git blame" got | |
| faster because of the same change. | |
| - "git log" and "git rev-list" has been optimized | |
| significantly when they are used with pathspecs. | |
| - "git branch --track" can be used to set up configuration | |
| variables to help it easier to base your work on branches | |
| you track from a remote site. | |
| - "git format-patch --attach" now emits attachments. Use | |
| --inline to get an inlined multipart/mixed. | |
| - "git name-rev" learned --refs=<pattern>, to limit the tags | |
| used for naming the given revisions only to the ones | |
| matching the given pattern. | |
| - "git remote update" is to run "git fetch" for defined remotes | |
| to update tracking branches. | |
| - "git cvsimport" can now take '-d' to talk with a CVS | |
| repository different from what are recorded in CVS/Root | |
| (overriding it with environment CVSROOT does not work). | |
| - "git bundle" can help sneaker-netting your changes between | |
| repositories. | |
| - "git mergetool" can help 3-way file-level conflict | |
| resolution with your favorite graphical merge tools. | |
| - A new configuration "core.symlinks" can be used to disable | |
| symlinks on filesystems that do not support them; they are | |
| checked out as regular files instead. | |
| - You can name a commit object with its first line of the | |
| message. The syntax to use is ':/message text'. E.g. | |
| $ git show ":/object name: introduce ':/<oneline prefix>' notation" | |
| means the same thing as: | |
| $ git show 28a4d940443806412effa246ecc7768a21553ec7 | |
| - "git bisect" learned a new command "run" that takes a script | |
| to run after each revision is checked out to determine if it | |
| is good or bad, to automate the bisection process. | |
| - "git log" family learned a new traversal option --first-parent, | |
| which does what the name suggests. | |
| * Updated behavior of existing commands. | |
| - "git-merge-recursive" used to barf when there are more than | |
| one common ancestors for the merge, and merging them had a | |
| rename/rename conflict. This has been fixed. | |
| - "git fsck" does not barf on corrupt loose objects. | |
| - "git rm" does not remove newly added files without -f. | |
| - "git archimport" allows remapping when coming up with git | |
| branch names from arch names. | |
| - git-svn got almost a rewrite. | |
| - core.autocrlf configuration, when set to 'true', makes git | |
| to convert CRLF at the end of lines in text files to LF when | |
| reading from the filesystem, and convert in reverse when | |
| writing to the filesystem. The variable can be set to | |
| 'input', in which case the conversion happens only while | |
| reading from the filesystem but files are written out with | |
| LF at the end of lines. Currently, which paths to consider | |
| 'text' (i.e. be subjected to the autocrlf mechanism) is | |
| decided purely based on the contents, but the plan is to | |
| allow users to explicitly override this heuristic based on | |
| paths. | |
| - The behavior of 'git-apply', when run in a subdirectory, | |
| without --index nor --cached were inconsistent with that of | |
| the command with these options. This was fixed to match the | |
| behavior with --index. A patch that is meant to be applied | |
| with -p1 from the toplevel of the project tree can be | |
| applied with any custom -p<n> option. A patch that is not | |
| relative to the toplevel needs to be applied with -p<n> | |
| option with or without --index (or --cached). | |
| - "git diff" outputs a trailing HT when pathnames have embedded | |
| SP on +++/--- header lines, in order to help "GNU patch" to | |
| parse its output. "git apply" was already updated to accept | |
| this modified output format since ce74618d (Sep 22, 2006). | |
| - "git cvsserver" runs hooks/update and honors its exit status. | |
| - "git cvsserver" can be told to send everything with -kb. | |
| - "git diff --check" also honors the --color output option. | |
| - "git name-rev" used to stress the fact that a ref is a tag too | |
| much, by saying something like "v1.2.3^0~22". It now says | |
| "v1.2.3~22" in such a case (it still says "v1.2.3^0" if it does | |
| not talk about an ancestor of the commit that is tagged, which | |
| makes sense). | |
| - "git rev-list --boundary" now shows boundary markers for the | |
| commits omitted by --max-age and --max-count condition. | |
| - The configuration mechanism now reads $(prefix)/etc/gitconfig. | |
| - "git apply --verbose" shows what preimage lines were wanted | |
| when it couldn't find them. | |
| - "git status" in a read-only repository got a bit saner. | |
| - "git fetch" (hence "git clone" and "git pull") are less | |
| noisy when the output does not go to tty. | |
| - "git fetch" between repositories with many refs were slow | |
| even when there are not many changes that needed | |
| transferring. This has been sped up by partially rewriting | |
| the heaviest parts in C. | |
| - "git mailinfo" which splits an e-mail into a patch and the | |
| meta-information was rewritten, thanks to Don Zickus. It | |
| handles nested multipart better. The command was broken for | |
| a brief period on 'master' branch since 1.5.0 but the | |
| breakage is fixed now. | |
| - send-email learned configurable bcc and chain-reply-to. | |
| - "git remote show $remote" also talks about branches that | |
| would be pushed if you run "git push remote". | |
| - Using objects from packs is now seriously optimized by clever | |
| use of a cache. This should be most noticeable in git-log | |
| family of commands that involve reading many tree objects. | |
| In addition, traversing revisions while filtering changes | |
| with pathspecs is made faster by terminating the comparison | |
| between the trees as early as possible. | |
| * Hooks | |
| - The part to send out notification e-mails was removed from | |
| the sample update hook, as it was not an appropriate place | |
| to do so. The proper place to do this is the new post-receive | |
| hook. An example hook has been added to contrib/hooks/. | |
| * Others | |
| - git-revert, git-gc and git-cherry-pick are now built-ins. | |
| Fixes since v1.5.0 | |
| ------------------ | |
| These are all in v1.5.0.x series. | |
| * Documentation updates | |
| - Clarifications and corrections to 1.5.0 release notes. | |
| - The main documentation did not link to git-remote documentation. | |
| - Clarified introductory text of git-rebase documentation. | |
| - Converted remaining mentions of update-index on Porcelain | |
| documents to git-add/git-rm. | |
| - Some i18n.* configuration variables were incorrectly | |
| described as core.*; fixed. | |
| - added and clarified core.bare, core.legacyheaders configurations. | |
| - updated "git-clone --depth" documentation. | |
| - user-manual updates. | |
| - Options to 'git remote add' were described insufficiently. | |
| - Configuration format.suffix was not documented. | |
| - Other formatting and spelling fixes. | |
| - user-manual has better cross references. | |
| - gitweb installation/deployment procedure is now documented. | |
| * Bugfixes | |
| - git-upload-pack closes unused pipe ends; earlier this caused | |
| many zombies to hang around. | |
| - git-rerere was recording the contents of earlier hunks | |
| duplicated in later hunks. This prevented resolving the same | |
| conflict when performing the same merge the other way around. | |
| - git-add and git-update-index on a filesystem on which | |
| executable bits are unreliable incorrectly reused st_mode | |
| bits even when the path changed between symlink and regular | |
| file. | |
| - git-daemon marks the listening sockets with FD_CLOEXEC so | |
| that it won't be leaked into the children. | |
| - segfault from git-blame when the mandatory pathname | |
| parameter was missing was fixed; usage() message is given | |
| instead. | |
| - git-rev-list did not read $GIT_DIR/config file, which means | |
| that did not honor i18n.logoutputencoding correctly. | |
| - Automated merge conflict handling when changes to symbolic | |
| links conflicted were completely broken. The merge-resolve | |
| strategy created a regular file with conflict markers in it | |
| in place of the symbolic link. The default strategy, | |
| merge-recursive was even more broken. It removed the path | |
| that was pointed at by the symbolic link. Both of these | |
| problems have been fixed. | |
| - 'git diff maint master next' did not correctly give combined | |
| diff across three trees. | |
| - 'git fast-import' portability fix for Solaris. | |
| - 'git show-ref --verify' without arguments did not error out | |
| but segfaulted. | |
| - 'git diff :tracked-file `pwd`/an-untracked-file' gave an extra | |
| slashes after a/ and b/. | |
| - 'git format-patch' produced too long filenames if the commit | |
| message had too long line at the beginning. | |
| - Running 'make all' and then without changing anything | |
| running 'make install' still rebuilt some files. This | |
| was inconvenient when building as yourself and then | |
| installing as root (especially problematic when the source | |
| directory is on NFS and root is mapped to nobody). | |
| - 'git-rerere' failed to deal with two unconflicted paths that | |
| sorted next to each other. | |
| - 'git-rerere' attempted to open(2) a symlink and failed if | |
| there was a conflict. Since a conflicting change to a | |
| symlink would not benefit from rerere anyway, the command | |
| now ignores conflicting changes to symlinks. | |
| - 'git-repack' did not like to pass more than 64 arguments | |
| internally to underlying 'rev-list' logic, which made it | |
| impossible to repack after accumulating many (small) packs | |
| in the repository. | |
| - 'git-diff' to review the combined diff during a conflicted | |
| merge were not reading the working tree version correctly | |
| when changes to a symbolic link conflicted. It should have | |
| read the data using readlink(2) but read from the regular | |
| file the symbolic link pointed at. | |
| - 'git-remote' did not like period in a remote's name. | |
| - 'git.el' honors the commit coding system from the configuration. | |
| - 'blameview' in contrib/ correctly digs deeper when a line is | |
| clicked. | |
| - 'http-push' correctly makes sure the remote side has leading | |
| path. Earlier it started in the middle of the path, and | |
| incorrectly. | |
| - 'git-merge' did not exit with non-zero status when the | |
| working tree was dirty and cannot fast forward. It does | |
| now. | |
| - 'cvsexportcommit' does not lose yet-to-be-used message file. | |
| - int-vs-size_t typefix when running combined diff on files | |
| over 2GB long. | |
| - 'git apply --whitespace=strip' should not touch unmodified | |
| lines. | |
| - 'git-mailinfo' choke when a logical header line was too long. | |
| - 'git show A..B' did not error out. Negative ref ("not A" in | |
| this example) does not make sense for the purpose of the | |
| command, so now it errors out. | |
| - 'git fmt-merge-msg --file' without file parameter did not | |
| correctly error out. | |
| - 'git archimport' barfed upon encountering a commit without | |
| summary. | |
| - 'git index-pack' did not protect itself from getting a short | |
| read out of pread(2). | |
| - 'git http-push' had a few buffer overruns. | |
| - Build dependency fixes to rebuild fetch.o when other headers | |
| change. | |
| - git.el does not add duplicate sign-off lines. | |
| - git-commit shows the full stat of the resulting commit, not | |
| just about the files in the current directory, when run from | |
| a subdirectory. | |
| - "git-checkout -m '@{8 hours ago}'" had a funny failure from | |
| eval; fixed. | |
| - git-merge (hence git-pull) did not refuse fast-forwarding | |
| when the working tree had local changes that would have | |
| conflicted with it. | |
| - a handful small fixes to gitweb. | |
| - build procedure for user-manual is fixed not to require locally | |
| installed stylesheets. | |
| - "git commit $paths" on paths whose earlier contents were | |
| already updated in the index were failing out. | |
| * Tweaks | |
| - sliding mmap() inefficiently mmaped the same region of a | |
| packfile with an access pattern that used objects in the | |
| reverse order. This has been made more efficient. |