Git v1.7.0.5 Release Notes ========================== Fixes since v1.7.0.4 -------------------- * "git daemon" failed to compile on platforms without sockaddr_storage type. * Output from "git rev-list --pretty=oneline" was unparsable when a commit did not have any message, which is abnormal but possible in a repository converted from foreign scm. * "git stash show " gave an error message that was not so useful. Reworded the message to " is not a stash". * Python scripts in contrib/ area now start with "#!/usr/bin/env python" to honor user's PATH. * "git imap-send" used to mistake any line that begins with "From " as a message separator in format-patch output. * Smart http server backend failed to report an internal server error and infinitely looped instead after output pipe was closed. And other minor fixes and documentation updates. Git v1.7.0.4 Release Notes ========================== Fixes since v1.7.0.3 -------------------- * Optimized ntohl/htonl on big-endian machines were broken. * Color values given to "color.." configuration can now have more than one attributes (e.g. "bold ul"). * "git add -u nonexistent-path" did not complain. * "git apply --whitespace=fix" didn't work well when an early patch in a patch series adds trailing blank lines and a later one depended on such a block of blank lines at the end. * "git fast-export" didn't check error status and stop when marks file cannot be opened. * "git format-patch --ignore-if-in-upstream" gave unwarranted errors when the range was empty, instead of silently finishing. * "git remote prune" did not detect remote tracking refs that became dangling correctly. And other minor fixes and documentation updates. Git v1.7.0.3 Release Notes ========================== Fixes since v1.7.0.2 -------------------- * Object files are created in a more ACL friendly way in repositories where group permission is ACL controlled. * "git add -i" didn't handle a deleted path very well. * "git blame" padded line numbers with one extra SP when the total number of lines was one less than multiple of ten due to an off-by-one error. * "git fetch --all/--multi" used to discard information for remotes that are fetched earlier. * "git log --author=me --grep=it" tried to find commits that have "it" or are written by "me", instead of the ones that have "it" _and_ are written by "me". * "git log -g branch" misbehaved when there was no entries in the reflog for the named branch. * "git mailinfo" (hence "git am") incorrectly removed initial indent from paragraphs. * "git prune" and "git reflog" (hence "git gc" as well) didn't honor an instruction never to expire by setting gc.reflogexpire to never. * "git push" misbehaved when branch..merge was configured without matching branch..remote. And other minor fixes and documentation updates. Git v1.7.0.2 Release Notes ========================== Fixes since v1.7.0.1 -------------------- * GIT_PAGER was not honored consistently by some scripted Porcelains, most notably "git am". * updating working tree files after telling git to add them to the index and while it is still working created garbage object files in the repository without diagnosing it as an error. * "git bisect -- pathspec..." did not diagnose an error condition properly when the simplification with given pathspec made the history empty. * "git rev-list --cherry-pick A...B" now has an obvious optimization when the histories haven't diverged (i.e. when one end is an ancestor of the other). * "git diff --quiet -w" did not work as expected. * "git fast-import" didn't work with a large input, as it lacked support for producing the pack index in v2 format. * "git imap-send" didn't use CRLF line endings over the imap protocol when storing its payload to the draft box, violating RFC 3501. * "git log --format='%w(x,y,z)%b'" and friends that rewrap message has been optimized for utf-8 payload. * Error messages generated on the receiving end did not come back to "git push". * "git status" in 1.7.0 lacked the optimization we used to have in 1.6.X series to speed up scanning of large working tree. * "gitweb" did not diagnose parsing errors properly while reading tis configuration file. And other minor fixes and documentation updates. Git v1.7.0.1 Release Notes ========================== Fixes since v1.7.0 ------------------ * In a freshly created repository "rev-parse HEAD^0" complained that it is dangling symref, even though "rev-parse HEAD" didn't. * "git show :no-such-name" tried to access the index without bounds check, leading to a potential segfault. * Message from "git cherry-pick" was harder to read and use than necessary when it stopped due to conflicting changes. * We referred to ".git/refs/" throughout the documentation when we meant to talk about abstract notion of "ref namespace". Because people's repositories often have packed refs these days, this was confusing. * "git diff --output=/path/that/cannot/be/written" did not correctly error out. * "git grep -e -pattern-that-begin-with-dash paths..." could not be spelled as "git grep -- -pattern-that-begin-with-dash paths..." which would be a GNU way to use "--" as "end of options". * "git grep" compiled with threading support tried to access an uninitialized mutex on boxes with a single CPU. * "git stash pop -q --index" failed because the unnecessary --index option was propagated to "git stash drop" that is internally run at the end. And other minor fixes and documentation updates. Git v1.7.0 Release Notes ======================== Notes on behaviour change ------------------------- * "git push" into a branch that is currently checked out (i.e. pointed at by HEAD in a repository that is not bare) is refused by default. Similarly, "git push $there :$killed" to delete the branch $killed in a remote repository $there, when $killed branch is the current branch pointed at by its HEAD, will be refused by default. Setting the configuration variables receive.denyCurrentBranch and receive.denyDeleteCurrent to 'ignore' in the receiving repository can be used to override these safety features. * "git send-email" does not make deep threads by default when sending a patch series with more than two messages. All messages will be sent as a reply to the first message, i.e. cover letter. It has been possible already to configure send-email to send "shallow thread" by setting sendemail.chainreplyto configuration variable to false. The only thing this release does is to change the default when you haven't configured that variable. * "git status" is not "git commit --dry-run" anymore. This change does not affect you if you run the command without argument. * "git diff" traditionally treated various "ignore whitespace" options only as a way to filter the patch output. "git diff --exit-code -b" exited with non-zero status even if all changes were about changing the amount of whitespace and nothing else; and "git diff -b" showed the "diff --git" header line for such a change without patch text. In this release, the "ignore whitespaces" options affect the semantics of the diff operation. A change that does not affect anything but whitespaces is reported with zero exit status when run with --exit-code, and there is no "diff --git" header for such a change. * External diff and textconv helpers are now executed using the shell. This makes them consistent with other programs executed by git, and allows you to pass command-line parameters to the helpers. Any helper paths containing spaces or other metacharacters now need to be shell-quoted. The affected helpers are GIT_EXTERNAL_DIFF in the environment, and diff.*.command and diff.*.textconv in the config file. * The --max-pack-size argument to 'git repack', 'git pack-objects', and 'git fast-import' was assuming the provided size to be expressed in MiB, unlike the corresponding config variable and other similar options accepting a size value. It is now expecting a size expressed in bytes, with a possible unit suffix of 'k', 'm', or 'g'. Updates since v1.6.6 -------------------- (subsystems) * "git fast-import" updates; adds "option" and "feature" to detect the mismatch between fast-import and the frontends that produce the input stream. * "git svn" support of subversion "merge tickets" and miscellaneous fixes. * "gitk" and "git gui" translation updates. * "gitweb" updates (code clean-up, load checking etc.) (portability) * Some more MSVC portability patches for msysgit port. * Minimum Pthreads emulation for msysgit port. (performance) * More performance improvement patches for msysgit port. (usability, bells and whistles) * More commands learned "--quiet" and "--[no-]progress" options. * Various commands given by the end user (e.g. diff.type.textconv, and GIT_EDITOR) can be specified with command line arguments. E.g. it is now possible to say "[diff "utf8doc"] textconv = nkf -w". * "sparse checkout" feature allows only part of the work tree to be checked out. * HTTP transfer can use authentication scheme other than basic (i.e./e.g. digest). * Switching from a version of superproject that used to have a submodule to another version of superproject that no longer has it did not remove the submodule directory when it should (namely, when you are not interested in the submodule at all and didn't clone/checkout). * A new attribute conflict-marker-size can be used to change the size of the conflict markers from the default 7; this is useful when tracked contents (e.g. git-merge documentation) have strings that resemble the conflict markers. * A new syntax "@{upstream}" can be used on the command line to substitute the name of the "upstream" of the branch. Missing branch defaults to the current branch, so "git fetch && git merge @{upstream}" will be equivalent to "git pull". * "git am --resolved" has a synonym "git am --continue". * "git branch --set-upstream" can be used to update the (surprise!) upstream, i.e. where the branch is supposed to pull and merge from (or rebase onto). * "git checkout A...B" is a way to detach HEAD at the merge base between A and B. * "git checkout -m path" to reset the work tree file back into the conflicted state works even when you already ran "git add path" and resolved the conflicts. * "git commit --date=''" can be used to override the author date just like "git commit --author=' '" can be used to override the author identity. * "git commit --no-status" can be used to omit the listing of the index and the work tree status in the editor used to prepare the log message. * "git commit" warns a bit more aggressively until you configure user.email, whose default value almost always is not (and fundamentally cannot be) what you want. * "git difftool" has been extended to make it easier to integrate it with gitk. * "git fetch --all" can now be used in place of "git remote update". * "git grep" does not rely on external grep anymore. It can use more than one thread to accelerate the operation. * "git grep" learned "--quiet" option. * "git log" and friends learned "--glob=heads/*" syntax that is a more flexible way to complement "--branches/--tags/--remotes". * "git merge" learned to pass options specific to strategy-backends. E.g. - "git merge -Xsubtree=path/to/directory" can be used to tell the subtree strategy how much to shift the trees explicitly. - "git merge -Xtheirs" can be used to auto-merge as much as possible, while discarding your own changes and taking merged version in conflicted regions. * "git push" learned "git push origin --delete branch", a syntactic sugar for "git push origin :branch". * "git push" learned "git push --set-upstream origin forker:forkee" that lets you configure your "forker" branch to later pull from "forkee" branch at "origin". * "git rebase --onto A...B" means the history is replayed on top of the merge base between A and B. * "git rebase -i" learned new action "fixup" that squashes the change but does not affect existing log message. * "git rebase -i" also learned --autosquash option that is useful together with the new "fixup" action. * "git remote" learned set-url subcommand that updates (surprise!) url for an existing remote nickname. * "git rerere" learned "forget path" subcommand. Together with "git checkout -m path" it will be useful when you recorded a wrong resolution. * Use of "git reset --merge" has become easier when resetting away a conflicted mess left in the work tree. * "git rerere" had rerere.autoupdate configuration but there was no way to countermand it from the command line; --no-rerere-autoupdate option given to "merge", "revert", etc. fixes this. * "git status" learned "-s(hort)" output format. (developers) * The infrastructure to build foreign SCM interface has been updated. * Many more commands are now built-in. * THREADED_DELTA_SEARCH is no more. If you build with threads, delta compression will always take advantage of it. Fixes since v1.6.6 ------------------ All of the fixes in v1.6.6.X maintenance series are included in this release, unless otherwise noted. * "git branch -d branch" used to refuse deleting the branch even when the branch is fully merged to its upstream branch if it is not merged to the current branch. It now deletes it in such a case. * "fiter-branch" command incorrectly said --prune-empty and --filter-commit were incompatible; the latter should be read as --commit-filter. * When using "git status" or asking "git diff" to compare the work tree with something, they used to consider that a checked-out submodule with uncommitted changes is not modified; this could cause people to forget committing these changes in the submodule before committing in the superproject. They now consider such a change as a modification and "git diff" will append a "-dirty" to the work tree side when generating patch output or when used with the --submodule option. Git v1.6.6.2 Release Notes ========================== Fixes since v1.6.6.1 -------------------- * recursive merge didn't correctly diagnose its own programming errors, and instead caused the caller to segfault. * The new "smart http" aware clients probed the web servers to see if they support smart http, but did not fall back to dumb http transport correctly with some servers. * Time based reflog syntax e.g. "@{yesterday}" didn't diagnose a misspelled time specification and instead assumed "@{now}". * "git archive HEAD -- no-such-directory" produced an empty archive without complaining. * "git blame -L start,end -- file" misbehaved when given a start that is larger than the number of lines in the file. * "git checkout -m" didn't correctly call custom merge backend supplied by the end user. * "git config -f " misbehaved when run from a subdirectory. * "git cvsserver" didn't like having regex metacharacters (e.g. '+') in CVSROOT environment. * "git fast-import" did not correctly handle large blobs that may bust the pack size limit. * "git gui" is supposed to work even when launched from inside a .git directory. * "git gui" misbehaved when applying a hunk that ends with deletion. * "git imap-send" did not honor imap.preformattedHTML as documented. * "git log" family incorrectly showed the commit notes unconditionally by mistake, which was especially irritating when running "git log --oneline". * "git status" shouldn't require an write access to the repository. Other minor documentation updates are included. Git v1.6.6.1 Release Notes ========================== Fixes since v1.6.6 ------------------ * "git blame" did not work well when commit lacked the author name. * "git branch -a name" wasn't diagnosed as an error. * "git count-objects" did not handle packfiles that are bigger than 4G on platforms with 32-bit off_t. * "git checkout -m other" while on a branch that does not have any commit segfaulted, instead of failing. * "git fast-import" choked when fed a tag that do not point at a commit. * "git grep" finding from work tree files could have fed garbage to the underlying regexec(3). * "git grep -L" didn't show empty files (they should never match, and they should always appear in -L output as unmatching). * "git rebase -i" did not abort cleanly if it failed to launch the editor. * "git reset --hard" did not work correctly when GIT_WORK_TREE environment variable is used to point at the root of the true work tree. * http-backend was not listed in the command list in the documentation. * Building on FreeBSD (both 7 and 8) needs OLD_ICONV set in the Makefile * "git checkout -m some-branch" while on an unborn branch crashed. Other minor documentation updates are included. Git v1.6.6 Release Notes ======================== Notes on behaviour change ------------------------- * In this release, "git fsck" defaults to "git fsck --full" and checks packfiles, and because of this it will take much longer to complete than before. If you prefer a quicker check only on loose objects (the old default), you can say "git fsck --no-full". This has been supported by 1.5.4 and newer versions of git, so it is safe to write it in your script even if you use slightly older git on some of your machines. Preparing yourselves for compatibility issues in 1.7.0 ------------------------------------------------------ In git 1.7.0, which is planned to be the release after 1.6.6, there will be a handful of behaviour changes that will break backward compatibility. These changes were discussed long time ago and existing behaviours have been identified as more problematic to the userbase than keeping them for the sake of backward compatibility. When necessary, a transition strategy for existing users has been designed not to force them running around setting configuration variables and updating their scripts in order to either keep the traditional behaviour or adjust to the new behaviour, on the day their sysadmin decides to install the new version of git. When we switched from "git-foo" to "git foo" in 1.6.0, even though the change had been advertised and the transition guide had been provided for a very long time, the users procrastinated during the entire transtion period, and ended up panicking on the day their sysadmins updated their git installation. We are trying to avoid repeating that unpleasantness in the 1.7.0 release. For changes decided to be in 1.7.0, commands that will be affected have been much louder to strongly discourage such procrastination, and they continue to be in this release. If you have been using recent versions of git, you would have seen warnings issued when you used features whose behaviour will change, with a clear instruction on how to keep the existing behaviour if you want to. You hopefully are already well prepared. Of course, we have also been giving "this and that will change in 1.7.0; prepare yourselves" warnings in the release notes and announcement messages for the past few releases. Let's see how well users will fare this time. * "git push" into a branch that is currently checked out (i.e. pointed by HEAD in a repository that is not bare) will be refused by default. Similarly, "git push $there :$killed" to delete the branch $killed in a remote repository $there, when $killed branch is the current branch pointed at by its HEAD, will be refused by default. Setting the configuration variables receive.denyCurrentBranch and receive.denyDeleteCurrent to 'ignore' in the receiving repository can be used to override these safety features. Versions of git since 1.6.2 have issued a loud warning when you tried to do these operations without setting the configuration, so repositories of people who still need to be able to perform such a push should already have been future proofed. Please refer to: http://git.or.cz/gitwiki/GitFaq#non-bare http://thread.gmane.org/gmane.comp.version-control.git/107758/focus=108007 for more details on the reason why this change is needed and the transition process that already took place so far. * "git send-email" will not make deep threads by default when sending a patch series with more than two messages. All messages will be sent as a reply to the first message, i.e. cover letter. Git 1.6.6 (this release) will issue a warning about the upcoming default change, when it uses the traditional "deep threading" behaviour as the built-in default. To squelch the warning but still use the "deep threading" behaviour, give --chain-reply-to option or set sendemail.chainreplyto to true. It has been possible to configure send-email to send "shallow thread" by setting sendemail.chainreplyto configuration variable to false. The only thing 1.7.0 release will do is to change the default when you haven't configured that variable. * "git status" will not be "git commit --dry-run". This change does not affect you if you run the command without pathspec. Nobody sane found the current behaviour of "git status Makefile" useful nor meaningful, and it confused users. "git commit --dry-run" has been provided as a way to get the current behaviour of this command since 1.6.5. * "git diff" traditionally treated various "ignore whitespace" options only as a way to filter the patch output. "git diff --exit-code -b" exited with non-zero status even if all changes were about changing the ammount of whitespace and nothing else. and "git diff -b" showed the "diff --git" header line for such a change without patch text. In 1.7.0, the "ignore whitespaces" will affect the semantics of the diff operation itself. A change that does not affect anything but whitespaces will be reported with zero exit status when run with --exit-code, and there will not be "diff --git" header for such a change. Updates since v1.6.5 -------------------- (subsystems) * various gitk updates including use of themed widgets under Tk 8.5, Japanese translation, a fix to a bug when running "gui blame" from a subdirectory, etc. * various git-gui updates including new translations, wm states fixes, Tk bug workaround after quitting, improved heuristics to trigger gc, etc. * various git-svn updates. * "git fetch" over http learned a new mode that is different from the traditional "dumb commit walker". (portability) * imap-send can be built on mingw port. (performance) * "git diff -B" has smaller memory footprint. (usability, bells and whistles) * The object replace mechanism can be bypassed with --no-replace-objects global option given to the "git" program. * In configuration files, a few variables that name paths can begin with ~/ and ~username/ and they are expanded as expected. * "git subcmd -h" now shows short usage help for many more subcommands. * "git bisect reset" can reset to an arbitrary commit. * "git checkout frotz" when there is no local branch "frotz" but there is only one remote tracking branch "frotz" is taken as a request to start the named branch at the corresponding remote tracking branch. * "git commit -c/-C/--amend" can be told with a new "--reset-author" option to ignore authorship information in the commit it is taking the message from. * "git describe" can be told to add "-dirty" suffix with "--dirty" option. * "git diff" learned --submodule option to show a list of one-line logs instead of differences between the commit object names. * "git diff" learned to honor diff.color.func configuration to paint function name hint printed on the hunk header "@@ -j,k +l,m @@" line in the specified color. * "git fetch" learned --all and --multiple options, to run fetch from many repositories, and --prune option to remove remote tracking branches that went stale. These make "git remote update" and "git remote prune" less necessary (there is no plan to remove "remote update" nor "remote prune", though). * "git fsck" by default checks the packfiles (i.e. "--full" is the default); you can turn it off with "git fsck --no-full". * "git grep" can use -F (fixed strings) and -i (ignore case) together. * import-tars contributed fast-import frontend learned more types of compressed tarballs. * "git instaweb" knows how to talk with mod_cgid to apache2. * "git log --decorate" shows the location of HEAD as well. * "git log" and "git rev-list" learned to take revs and pathspecs from the standard input with the new "--stdin" option. * "--pretty=format" option to "log" family of commands learned: . to wrap text with the "%w()" specifier. . to show reflog information with "%g[sdD]" specifier. * "git notes" command to annotate existing commits. * "git merge" (and "git pull") learned --ff-only option to make it fail if the merge does not result in a fast-forward. * "git mergetool" learned to use p4merge. * "git rebase -i" learned "reword" that acts like "edit" but immediately starts an editor to tweak the log message without returning control to the shell, which is done by "edit" to give an opportunity to tweak the contents. * "git send-email" can be told with "--envelope-sender=auto" to use the same address as "From:" address as the envelope sender address. * "git send-email" will issue a warning when it defaults to the --chain-reply-to behaviour without being told by the user and instructs to prepare for the change of the default in 1.7.0 release. * In "git submodule add ", is now optional and inferred from the same way "git clone " does. * "git svn" learned to read SVN 1.5+ and SVK merge tickets. * "git svn" learned to recreate empty directories tracked only by SVN. * "gitweb" can optionally render its "blame" output incrementally (this requires JavaScript on the client side). * Author names shown in gitweb output are links to search commits by the author. Fixes since v1.6.5 ------------------ All of the fixes in v1.6.5.X maintenance series are included in this release, unless otherwise noted. Git v1.6.5.8 Release Notes ========================== Fixes since v1.6.5.7 -------------------- * "git count-objects" did not handle packfiles that are bigger than 4G on platforms with 32-bit off_t. * "git rebase -i" did not abort cleanly if it failed to launch the editor. * "git blame" did not work well when commit lacked the author name. * "git fast-import" choked when handling a tag that points at an object that is not a commit. * "git reset --hard" did not work correctly when GIT_WORK_TREE environment variable is used to point at the root of the true work tree. * "git grep" fed a buffer that is not NUL-terminated to underlying regexec(). * "git checkout -m other" while on a branch that does not have any commit segfaulted, instead of failing. * "git branch -a other" should have diagnosed the command as an error. Other minor documentation updates are also included. Git v1.6.5.7 Release Notes ========================== Fixes since v1.6.5.6 -------------------- * If a user specifies a color for a (i.e. a class of things to show in a particular color) that is known only by newer versions of git (e.g. "color.diff.func" was recently added for upcoming 1.6.6 release), an older version of git should just ignore them. Instead we diagnosed it as an error. * With help.autocorrect set to non-zero value, the logic to guess typoes in the subcommand name misfired and ran a random nonsense command. * If a command is run with an absolute path as a pathspec inside a bare repository, e.g. "rev-list HEAD -- /home", the code tried to run strlen() on NULL, which is the result of get_git_work_tree(), and segfaulted. Git v1.6.5.6 Release Notes ========================== Fixes since v1.6.5.5 -------------------- * "git add -p" had a regression since v1.6.5.3 that broke deletion of non-empty files. * "git archive -o o.zip -- Makefile" produced an archive in o.zip but in POSIX tar format. * Error message given to "git pull --rebase" when the user didn't give enough clue as to what branch to integrate with still talked about "merging with" the branch. * Error messages given by "git merge" when the merge resulted in a fast-forward still were in plumbing lingo, even though in v1.6.5 we reworded messages in other cases. * The post-upload-hook run by upload-pack in response to "git fetch" has been removed, due to security concerns (the hook first appeared in 1.6.5). Git v1.6.5.5 Release Notes ========================== Fixes since v1.6.5.4 -------------------- * Manual pages can be formatted with older xmlto again. * GREP_OPTIONS exported from user's environment could have broken our scripted commands. * In configuration files, a few variables that name paths can begin with ~/ and ~username/ and they are expanded as expected. This is not a bugfix but 1.6.6 will have this and without backporting users cannot easily use the same ~/.gitconfig across versions. * "git diff -B -M" did the same computation to hash lines of contents twice, and held onto memory after it has used the data in it unnecessarily before it freed. * "git diff -B" and "git diff --dirstat" was not counting newly added contents correctly. * "git format-patch revisions... -- path" issued an incorrect error message that suggested to use "--" on the command line when path does not exist in the current work tree (it is a separate matter if it makes sense to limit format-patch with pathspecs like that without using the --full-diff option). * "git grep -F -i StRiNg" did not work as expected. * Enumeration of available merge strategies iterated over the list of commands in a wrong way, sometimes producing an incorrect result. * "git shortlog" did not honor the "encoding" header embedded in the commit object like "git log" did. * Reading progress messages that come from the remote side while running "git pull" is given precedence over reading the actual pack data to prevent garbled progress message on the user's terminal. * "git rebase" got confused when the log message began with certain strings that looked like Subject:, Date: or From: header. * "git reset" accidentally run in .git/ directory checked out the work tree contents in there. Other minor documentation updates are included. Git v1.6.5.4 Release Notes ========================== Fixes since v1.6.5.3 -------------------- * "git help" (without argument) used to check if you are in a directory under git control. There was no breakage in behaviour per-se, but this was unnecessary. * "git prune-packed" gave progress output even when its standard error is not connected to a terminal; this caused cron jobs that run it to produce crufts. * "git pack-objects --all-progress" is an option to ask progress output from write-object phase _if_ progress output were to be produced, and shouldn't have forced the progress output. * "git apply -p --directory=" did not work well for a non-default value of n. * "git merge foo HEAD" was misparsed as an old-style invocation of the command and produced a confusing error message. As it does not specify any other branch to merge, it shouldn't be mistaken as such. We will remove the old style "git merge HEAD ..." syntax in future versions, but not in this release, * "git merge -m ..." added the standard merge message on its own after user-supplied message, which should have overrided the standard one. Other minor documentation updates are included. Git v1.6.5.3 Release Notes ========================== Fixes since v1.6.5.2 -------------------- * info/grafts file didn't ignore trailing CR at the end of lines. * Packages generated on newer FC were unreadable by older versions of RPM as the new default is to use stronger hash. * output from "git blame" was unreadable when the file ended in an incomplete line. * "git add -i/-p" didn't handle deletion of empty files correctly. * "git clone" takes up to two parameters, but did not complain when given more arguments than necessary and silently ignored them. * "git cvsimport" did not read files given as command line arguments correctly when it is run from a subdirectory. * "git diff --color-words -U0" didn't work correctly. * The handling of blank lines at the end of file by "git diff/apply --whitespace" was inconsistent with the other kinds of errors. They are now colored, warned against, and fixed the same way as others. * There was no way to allow blank lines at the end of file without allowing extra blanks at the end of lines. You can use blank-at-eof and blank-at-eol whitespace error class to specify them separately. The old trailing-space error class is now a short-hand to set both. * "-p" option to "git format-patch" was supposed to suppress diffstat generation, but it was broken since 1.6.1. * "git imap-send" did not compile cleanly with newer OpenSSL. * "git help -a" outside of a git repository was broken. * "git ls-files -i" was supposed to be inverse of "git ls-files" without -i with respect to exclude patterns, but it was broken since 1.6.5.2. * "git ls-remote" outside of a git repository over http was broken. * "git rebase -i" gave bogus error message when the command word was misspelled. * "git receive-pack" that is run in response to "git push" did not run garbage collection nor update-server-info, but in larger hosting sites, these almost always need to be run. To help site administrators, the command now runs "gc --auto" and "u-s-i" by setting receive.autogc and receive.updateserverinfo configuration variables, respectively. * Release notes spelled the package name with incorrect capitalization. * "gitweb" did not escape non-ascii characters correctly in the URL. * "gitweb" showed "patch" link even for merge commits. * "gitweb" showed incorrect links for blob line numbers in pathinfo mode. Other minor documentation updates are included. GIT v1.6.5.2 Release Notes ========================== Fixes since v1.6.5.1 -------------------- * Installation of templates triggered a bug in busybox when using tar implementation from it. * "git add -i" incorrectly ignored paths that are already in the index if they matched .gitignore patterns. * "git describe --always" should have produced some output even there were no tags in the repository, but it didn't. * "git ls-files" when showing tracked files incorrectly paid attention to the exclude patterns. Other minor documentation updates are included. GIT v1.6.5.1 Release Notes ========================== Fixes since v1.6.5 ------------------ * An corrupt pack could make codepath to read objects into an infinite loop. * Download throughput display was always shown in KiB/s but on fast links it is more appropriate to show it in MiB/s. * "git grep -f filename" used uninitialized variable and segfaulted. * "git clone -b branch" gave a wrong commit object name to post-checkout hook. * "git pull" over http did not work on msys. Other minor documentation updates are included. GIT v1.6.5 Release Notes ======================== In git 1.7.0, which was planned to be the release after 1.6.5, "git push" into a branch that is currently checked out will be refused by default. You can choose what should happen upon such a push by setting the configuration variable receive.denyCurrentBranch in the receiving repository. Also, "git push $there :$killed" to delete the branch $killed in a remote repository $there, when $killed branch is the current branch pointed at by its HEAD, will be refused by default. You can choose what should happen upon such a push by setting the configuration variable receive.denyDeleteCurrent in the receiving repository. To ease the transition plan, the receiving repository of such a push running this release will issue a big warning when the configuration variable is missing. Please refer to: http://git.or.cz/gitwiki/GitFaq#non-bare http://thread.gmane.org/gmane.comp.version-control.git/107758/focus=108007 for more details on the reason why this change is needed and the transition plan. Updates since v1.6.4 -------------------- (subsystems) * various updates to gitk, git-svn and gitweb. (portability) * more improvements on mingw port. * mingw will also give FRSX as the default value for the LESS environment variable when the user does not have one. * initial support to compile git on Windows with MSVC. (performance) * On major platforms, the system can be compiled to use with Linus's block-sha1 implementation of the SHA-1 hash algorithm, which outperforms the default fallback implementation we borrowed from Mozilla. * Unnecessary inefficiency in deepening of a shallow repository has been removed. * "git clone" does not grab objects that it does not need (i.e. referenced only from refs outside refs/heads and refs/tags hierarchy) anymore. * The "git" main binary used to link with libcurl, which then dragged in a large number of external libraries. When using basic plumbing commands in scripts, this unnecessarily slowed things down. We now implement http/https/ftp transfer as a separate executable as we used to. * "git clone" run locally hardlinks or copies the files in .git/ to newly created repository. It used to give new mtime to copied files, but this delayed garbage collection to trigger unnecessarily in the cloned repository. We now preserve mtime for these files to avoid this issue. (usability, bells and whistles) * Human writable date format to various options, e.g. --since=yesterday, master@{2000.09.17}, are taught to infer some omitted input properly. * A few programs gave verbose "advice" messages to help uninitiated people when issuing error messages. An infrastructure to allow users to squelch them has been introduced, and a few such messages can be silenced now. * refs/replace/ hierarchy is designed to be usable as a replacement of the "grafts" mechanism, with the added advantage that it can be transferred across repositories. * "git am" learned to optionally ignore whitespace differences. * "git am" handles input e-mail files that has CRLF line endings sensibly. * "git am" learned "--scissors" option to allow you to discard early part of an incoming e-mail. * "git archive -o output.zip" works without being told what format to use with an explicit "--format=zip".option. * "git checkout", "git reset" and "git stash" learned to pick and choose to use selected changes you made, similar to "git add -p". * "git clone" learned a "-b" option to pick a HEAD to check out different from the remote's default branch. * "git clone" learned --recursive option. * "git clone" from a local repository on a different filesystem used to copy individual object files without preserving the old timestamp, giving them extra lifetime in the new repository until they gc'ed. * "git commit --dry-run $args" is a new recommended way to ask "what would happen if I try to commit with these arguments." * "git commit --dry-run" and "git status" shows conflicted paths in a separate section to make them easier to spot during a merge. * "git cvsimport" now supports password-protected pserver access even when the password is not taken from ~/.cvspass file. * "git fast-export" learned --no-data option that can be useful when reordering commits and trees without touching the contents of blobs. * "git fast-import" has a pair of new front-end in contrib/ area. * "git init" learned to mkdir/chdir into a directory when given an extra argument (i.e. "git init this"). * "git instaweb" optionally can use mongoose as the web server. * "git log --decorate" can optionally be told with --decorate=full to give the reference name in full. * "git merge" issued an unnecessarily scary message when it detected that the merge may have to touch the path that the user has local uncommitted changes to. The message has been reworded to make it clear that the command aborted, without doing any harm. * "git push" can be told to be --quiet. * "git push" pays attention to url.$base.pushInsteadOf and uses a URL that is derived from the URL used for fetching. * informational output from "git reset" that lists the locally modified paths is made consistent with that of "git checkout $another_branch". * "git submodule" learned to give submodule name to scripts run with "foreach" subcommand. * various subcommands to "git submodule" learned --recursive option. * "git submodule summary" learned --files option to compare the work tree vs the commit bound at submodule path, instead of comparing the index. * "git upload-pack", which is the server side support for "git clone" and "git fetch", can call a new post-upload-pack hook for statistics purposes. (developers) * With GIT_TEST_OPTS="--root=/p/a/t/h", tests can be run outside the source directory; using tmpfs may give faster turnaround. * With NO_PERL_MAKEMAKER set, DESTDIR= is now honoured, so you can build for one location, and install into another location to tar it up. Fixes since v1.6.4 ------------------ All of the fixes in v1.6.4.X maintenance series are included in this release, unless otherwise noted. GIT v1.6.4.4 Release Notes ========================== Fixes since v1.6.4.4 -------------------- * The workaround for Github server that sometimes gave 500 (Internal server error) response to HEAD requests in 1.6.4.3 introduced a regression that caused re-fetching projects over http to segfault in certain cases due to uninitialized pointer being freed. * "git pull" on an unborn branch used to consider anything in the work tree and the index discardable. * "git diff -b/w" did not work well on the incomplete line at the end of the file, due to an incorrect hashing of lines in the low-level xdiff routines. * "git checkout-index --prefix=$somewhere" used to work when $somewhere is a symbolic link to a directory elsewhere, but v1.6.4.2 broke it. * "git unpack-objects --strict", invoked when receive.fsckobjects configuration is set in the receiving repository of "git push", did not properly check the objects, especially the submodule links, it received. Other minor documentation updates are included. GIT v1.6.4.3 Release Notes ========================== Fixes since v1.6.4.2 -------------------- * "git clone" from an empty repository gave unnecessary error message, even though it did everything else correctly. * "git cvsserver" invoked git commands via "git-foo" style, which has long been deprecated. * "git fetch" and "git clone" had an extra sanity check to verify the presense of the corresponding *.pack file before downloading *.idx file by issuing a HEAD request. Github server however sometimes gave 500 (Internal server error) response to HEAD even if a GET request for *.pack file to the same URL would have succeeded, and broke clone over HTTP from some of their repositories. As a workaround, this verification has been removed (as it is not absolutely necessary). * "git grep" did not like relative pathname to refer outside the current directory when run from a subdirectory. * an error message from "git push" was formatted in a very ugly way. * "git svn" did not quote the subversion user name correctly when running its author-prog helper program. Other minor documentation updates are included. GIT v1.6.4.2 Release Notes ========================== Fixes since v1.6.4.1 -------------------- * --date=relative output between 1 and 5 years ago rounded the number of years when saying X years Y months ago, instead of rounding it down. * "git add -p" did not handle changes in executable bits correctly (a regression around 1.6.3). * "git apply" did not honor GNU diff's convention to mark the creation/deletion event with UNIX epoch timestamp on missing side. * "git checkout" incorrectly removed files in a directory pointed by a symbolic link during a branch switch that replaces a directory with a symbolic link. * "git clean -d -f" happily descended into a subdirectory that is managed by a separate git repository. It now requires two -f options for safety. * "git fetch/push" over http transports had two rather grave bugs. * "git format-patch --cover-letter" did not prepare the cover letter file for use with non-ASCII strings when there are the series contributors with non-ASCII names. * "git pull origin branch" and "git fetch origin && git merge origin/branch" left different merge messages in the resulting commit. Other minor documentation updates are included. GIT v1.6.4.1 Release Notes ========================== Fixes since v1.6.4 ------------------ * An unquoted value in the configuration file, when it contains more than one whitespaces in a row, got them replaced with a single space. * "git am" used to accept a single piece of e-mail per file (not a mbox) as its input, but multiple input format support in v1.6.4 broke it. Apparently many people have been depending on this feature. * The short help text for "git filter-branch" command was a single long line, wrapped by terminals, and was hard to read. * The "recursive" strategy of "git merge" segfaulted when a merge has more than one merge-bases, and merging of these merge-bases involves a rename/rename or a rename/add conflict. * "git pull --rebase" did not use the right fork point when the repository has already fetched from the upstream that rewinds the branch it is based on in an earlier fetch. * Explain the concept of fast-forward more fully in "git push" documentation, and hint to refer to it from an error message when the command refuses an update to protect the user. * The default value for pack.deltacachesize, used by "git repack", is now 256M, instead of unbounded. Otherwise a repack of a moderately sized repository would needlessly eat into swap. * Document how "git repack" (hence "git gc") interacts with a repository that borrows its objects from other repositories (e.g. ones created by "git clone -s"). * "git show" on an annotated tag lacked a delimiting blank line between the tag itself and the contents of the object it tags. * "git verify-pack -v" erroneously reported number of objects with too deep delta depths as "chain length 0" objects. * Long names of authors and committers outside US-ASCII were sometimes incorrectly shown in "gitweb". Other minor documentation updates are included. GIT v1.6.4 Release Notes ======================== With the next major release, "git push" into a branch that is currently checked out will be refused by default. You can choose what should happen upon such a push by setting the configuration variable receive.denyCurrentBranch in the receiving repository. To ease the transition plan, the receiving repository of such a push running this release will issue a big warning when the configuration variable is missing. Please refer to: http://git.or.cz/gitwiki/GitFaq#non-bare http://thread.gmane.org/gmane.comp.version-control.git/107758/focus=108007 for more details on the reason why this change is needed and the transition plan. For a similar reason, "git push $there :$killed" to delete the branch $killed in a remote repository $there, if $killed branch is the current branch pointed at by its HEAD, gets a large warning. You can choose what should happen upon such a push by setting the configuration variable receive.denyDeleteCurrent in the receiving repository. Updates since v1.6.3 -------------------- (subsystems) * gitweb Perl style clean-up. * git-svn updates, including a new --authors-prog option to map author names by invoking an external program, 'git svn reset' to unwind 'git svn fetch', support for more than one branches, documenting of the useful --minimize-url feature, new "git svn gc" command, etc. (portability) * We feed iconv with "UTF-8" instead of "utf8"; the former is understood more widely. Similarly updated test scripts to use encoding names more widely understood (e.g. use "ISO8859-1" instead of "ISO-8859-1"). * Various portability fixes/workarounds for different vintages of SunOS, IRIX, and Windows. * Git-over-ssh transport on Windows supports PuTTY plink and TortoisePlink. (performance) * Many repeated use of lstat() are optimized out in "checkout" codepath. * git-status (and underlying git-diff-index --cached) are optimized to take advantage of cache-tree information in the index. (usability, bells and whistles) * "git add --edit" lets users edit the whole patch text to fine-tune what is added to the index. * "git am" accepts StGIT series file as its input. * "git bisect skip" skips to a more randomly chosen place in the hope to avoid testing a commit that is too close to a commit that is already known to be untestable. * "git cvsexportcommit" learned -k option to stop CVS keywords expansion * "git fast-export" learned to handle history simplification more gracefully. * "git fast-export" learned an option --tag-of-filtered-object to handle dangling tags resulting from history simplification more usefully. * "git grep" learned -p option to show the location of the match using the same context hunk marker "git diff" uses. * https transport can optionally be told that the used client certificate is password protected, in which case it asks the password only once. * "git imap-send" is IPv6 aware. * "git log --graph" draws graphs more compactly by using horizontal lines when able. * "git log --decorate" shows shorter refnames by stripping well-known refs/* prefix. * "git push $name" honors remote.$name.pushurl if present before using remote.$name.url. In other words, the URL used for fetching and pushing can be different. * "git send-email" understands quoted aliases in .mailrc files (might have to be backported to 1.6.3.X). * "git send-email" can fetch the sender address from the configuration variable "sendmail.from" (and "sendmail..from"). * "git show-branch" can color its output. * "add" and "update" subcommands to "git submodule" learned --reference option to use local clone with references. * "git submodule update" learned --rebase option to update checked out submodules by rebasing the local changes. * "gitweb" can optionally use gravatar to adorn author/committer names. (developers) * A major part of the "git bisect" wrapper has moved to C. * Formatting with the new version of AsciiDoc 8.4.1 is now supported. Fixes since v1.6.3 ------------------ All of the fixes in v1.6.3.X maintenance series are included in this release, unless otherwise noted. Here are fixes that this release has, but have not been backported to v1.6.3.X series. * "git diff-tree -r -t" used to omit new or removed directories from the output. df533f3 (diff-tree -r -t: include added/removed directories in the output, 2009-06-13) may need to be cherry-picked to backport this fix. * The way Git.pm sets up a Repository object was not friendly to callers that chdir around. It now internally records the repository location as an absolute path when autodetected. * Removing a section with "git config --remove-section", when its section header has a variable definition on the same line, lost that variable definition. * "git rebase -p --onto" used to always leave side branches of a merge intact, even when both branches are subject to rewriting. * "git repack" used to faithfully follow grafts and considered true parents recorded in the commit object unreachable from the commit. After such a repacking, you cannot remove grafts without corrupting the repository. * "git send-email" did not detect erroneous loops in alias expansion. GIT v1.6.3.4 Release Notes ========================== Fixes since v1.6.3.3 -------------------- * "git add --no-ignore-errors" did not override configured add.ignore-errors configuration. * "git apply --whitespace=fix" did not fix trailing whitespace on an incomplete line. * "git branch" opened too many commit objects unnecessarily. * "git checkout -f $commit" with a path that is a file (or a symlink) in the work tree to a commit that has a directory at the path issued an unnecessary error message. * "git diff -c/--cc" was very inefficient in coalescing the removed lines shared between parents. * "git diff -c/--cc" showed removed lines at the beginning of a file incorrectly. * "git remote show nickname" did not honor configured remote.nickname.uploadpack when inspecting the branches at the remote. * "git request-pull" when talking to the terminal for a preview showed some of the output in the pager. * "git request-pull start nickname [end]" did not honor configured remote.nickname.uploadpack when it ran git-ls-remote against the remote repository to learn the current tip of branches. Includes other documentation updates and minor fixes. GIT v1.6.3.3 Release Notes ========================== Fixes since v1.6.3.2 -------------------- * "git archive" running on Cygwin can get stuck in an infinite loop. * "git daemon" did not correctly parse the initial line that carries virtual host request information. * "git diff --textconv" leaked memory badly when the textconv filter errored out. * The built-in regular expressions to pick function names to put on hunk header lines for java and objc were very inefficiently written. * in certain error situations git-fetch (and git-clone) on Windows didn't detect connection abort and ended up waiting indefinitely. * import-tars script (in contrib) did not import symbolic links correctly. * http.c used CURLOPT_SSLKEY even on libcURL version 7.9.2, even though it was only available starting 7.9.3. * low-level filelevel merge driver used return value from strdup() without checking if we ran out of memory. * "git rebase -i" left stray closing parenthesis in its reflog message. * "git remote show" did not show all the URLs associated with the named remote, even though "git remote -v" did. Made them consistent by making the former show all URLs. * "whitespace" attribute that is set was meant to detect all errors known to git, but it told git to ignore trailing carriage-returns. Includes other documentation fixes. GIT v1.6.3.2 Release Notes ========================== Fixes since v1.6.3.1 -------------------- * A few codepaths picked up the first few bytes from an sha1[] by casting the (char *) pointer to (int *); GCC 4.4 did not like this, and aborted compilation. * Some unlink(2) failures went undiagnosed. * The "recursive" merge strategy misbehaved when faced rename/delete conflicts while coming up with an intermediate merge base. * The low-level merge algorithm did not handle a degenerate case of merging a file with itself using itself as the common ancestor gracefully. It should produce the file itself, but instead produced an empty result. * GIT_TRACE mechanism segfaulted when tracing a shell-quoted aliases. * OpenBSD also uses st_ctimspec in "struct stat", instead of "st_ctim". * With NO_CROSS_DIRECTORY_HARDLINKS, "make install" can be told not to create hardlinks between $(gitexecdir)/git-$builtin_commands and $(bindir)/git. * command completion code in bash did not reliably detect that we are in a bare repository. * "git add ." in an empty directory complained that pathspec "." did not match anything, which may be technically correct, but not useful. We silently make it a no-op now. * "git add -p" (and "patch" action in "git add -i") was broken when the first hunk that adds a line at the top was split into two and both halves are marked to be used. * "git blame path" misbehaved at the commit where path became file from a directory with some files in it. * "git for-each-ref" had a segfaulting bug when dealing with a tag object created by an ancient git. * "git format-patch -k" still added patch numbers if format.numbered configuration was set. * "git grep --color ''" did not terminate. The command also had subtle bugs with its -w option. * http-push had a small use-after-free bug. * "git push" was converting OFS_DELTA pack representation into less efficient REF_DELTA representation unconditionally upon transfer, making the transferred data unnecessarily larger. * "git remote show origin" segfaulted when origin was still empty. Many other general usability updates around help text, diagnostic messages and documentation are included as well. GIT v1.6.3.1 Release Notes ========================== Fixes since v1.6.3 ------------------ * "git checkout -b new-branch" with a staged change in the index incorrectly primed the in-index cache-tree, resulting a wrong tree object to be written out of the index. This is a grave regression since the last 1.6.2.X maintenance release. GIT v1.6.3 Release Notes ======================== With the next major release, "git push" into a branch that is currently checked out will be refused by default. You can choose what should happen upon such a push by setting the configuration variable receive.denyCurrentBranch in the receiving repository. To ease the transition plan, the receiving repository of such a push running this release will issue a big warning when the configuration variable is missing. Please refer to: http://git.or.cz/gitwiki/GitFaq#non-bare http://thread.gmane.org/gmane.comp.version-control.git/107758/focus=108007 for more details on the reason why this change is needed and the transition plan. For a similar reason, "git push $there :$killed" to delete the branch $killed in a remote repository $there, if $killed branch is the current branch pointed at by its HEAD, gets a large warning. You can choose what should happen upon such a push by setting the configuration variable receive.denyDeleteCurrent in the receiving repository. When the user does not tell "git push" what to push, it has always pushed matching refs. For some people it is unexpected, and a new configuration variable push.default has been introduced to allow changing a different default behaviour. To advertise the new feature, a big warning is issued if this is not configured and a git push without arguments is attempted. Updates since v1.6.2 -------------------- (subsystems) * various git-svn updates. * git-gui updates, including an update to Russian translation, and a fix to an infinite loop when showing an empty diff. * gitk updates, including an update to Russian translation and improved Windows support. (performance) * many uses of lstat(2) in the codepath for "git checkout" have been optimized out. (usability, bells and whistles) * Boolean configuration variable yes/no can be written as on/off. * rsync:/path/to/repo can be used to run git over rsync for local repositories. It may not be useful in practice; meant primarily for testing. * http transport learned to prompt and use password when fetching from or pushing to http://user@host.xz/ URL. * (msysgit) progress output that is sent over the sideband protocol can be handled appropriately in Windows console. * "--pretty=