Git v1.7.9 Release Notes ======================== Updates since v1.7.8 -------------------- * gitk updates accumulated since early 2011. * git-gui updated to 0.16.0. * git-p4 (in contrib/) updates. * Git uses gettext to translate its most common interface messages into the user's language if translations are available and the locale is appropriately set. Distributors can drop new PO files in po/ to add new translations. * The code to handle username/password for HTTP transactions used in "git push" & "git fetch" learned to talk "credential API" to external programs to cache or store them, to allow integration with platform native keychain mechanisms. * The input prompts in the terminal use our own getpass() replacement when possible. HTTP transactions used to ask for the username without echoing back what was typed, but with this change you will see it as you type. * The internals of "revert/cherry-pick" have been tweaked to prepare building more generic "sequencer" on top of the implementation that drives them. * "git rev-parse FETCH_HEAD" after "git fetch" without specifying what to fetch from the command line will now show the commit that would be merged if the command were "git pull". * "git add" learned to stream large files directly into a packfile instead of writing them into individual loose object files. * "git checkout -B " is a more intuitive way to spell "git reset --keep ". * "git checkout" and "git merge" learned "--no-overwrite-ignore" option to tell Git that untracked and ignored files are not expendable. * "git commit --amend" learned "--no-edit" option to say that the user is amending the tree being recorded, without updating the commit log message. * "git commit" and "git reset" re-learned the optimization to prime the cache-tree information in the index, which makes it faster to write a tree object out after the index entries are updated. * "git commit" detects and rejects an attempt to stuff NUL byte in the commit log message. * "git commit" learned "-S" to GPG-sign the commit; this can be shown with the "--show-signature" option to "git log". * fsck and prune are relatively lengthy operations that still go silent while making the end-user wait. They learned to give progress output like other slow operations. * The set of built-in function-header patterns for various languages knows MATLAB. * "git log --format=''" learned new %g[nNeE] specifiers to show information from the reflog entries when walking the reflog (i.e. with "-g"). * "git pull" can be used to fetch and merge an annotated/signed tag, instead of the tip of a topic branch. The GPG signature from the signed tag is recorded in the resulting merge commit for later auditing. * "git log" learned "--show-signature" option to show the signed tag that was merged that is embedded in the merge commit. It also can show the signature made on the commit with "git commit -S". * "git branch --edit-description" can be used to add descriptive text to explain what a topic branch is about. * "git fmt-merge-msg" learned to take the branch description into account when preparing a merge summary that "git merge" records when merging a local branch. * "git request-pull" has been updated to convey more information useful for integrators to decide if a topic is worth merging and what is pulled is indeed what the requestor asked to pull, including: - the tip of the branch being requested to be merged; - the branch description describing what the topic is about; - the contents of the annotated tag, when requesting to pull a tag. * "git pull" learned to notice 'pull.rebase' configuration variable, which serves as a global fallback for setting 'branch..rebase' configuration variable per branch. * "git tag" learned "--cleanup" option to control how the whitespaces and empty lines in tag message are cleaned up. * "gitweb" learned to show side-by-side diff. Also contains minor documentation updates and code clean-ups. Fixes since v1.7.8 ------------------ Unless otherwise noted, all the fixes since v1.7.8 in the maintenance releases are contained in this release (see release notes to them for details). Git v1.7.8 Release Notes ======================== Updates since v1.7.7 -------------------- * Some git-svn, git-gui, git-p4 (in contrib) and msysgit updates. * Updates to bash completion scripts. * The build procedure has been taught to take advantage of computed dependency automatically when the complier supports it. * The date parser now accepts timezone designators that lack minutes part and also has a colon between "hh:mm". * The contents of the /etc/mailname file, if exists, is used as the default value of the hostname part of the committer/author e-mail. * "git am" learned how to read from patches generated by Hg. * "git archive" talking with a remote repository can report errors from the remote side in a more informative way. * "git branch" learned an explicit --list option to ask for branches listed, optionally with a glob matching pattern to limit its output. * "git check-attr" learned "--cached" option to look at .gitattributes files from the index, not from the working tree. * Variants of "git cherry-pick" and "git revert" that take multiple commits learned to "--continue" and "--abort". * "git daemon" gives more human readble error messages to clients using ERR packets when appropriate. * Errors at the network layer is logged by "git daemon". * "git diff" learned "--minimal" option to spend extra cycles to come up with a minimal patch output. * "git diff" learned "--function-context" option to show the whole function as context that was affected by a change. * "git difftool" can be told to skip launching the tool for a path by answering 'n' to its prompt. * "git fetch" learned to honor transfer.fsckobjects configuration to validate the objects that were received from the other end, just like "git receive-pack" (the receiving end of "git push") does. * "git fetch" makes sure that the set of objects it received from the other end actually completes the history before updating the refs. "git receive-pack" (the receiving end of "git push") learned to do the same. * "git fetch" learned that fetching/cloning from a regular file on the filesystem is not necessarily a request to unpack a bundle file; the file could be ".git" with "gitdir: " in it. * "git for-each-ref" learned "%(contents:subject)", "%(contents:body)" and "%(contents:signature)". The last one is useful for signed tags. * "git grep" used to incorrectly pay attention to .gitignore files scattered in the directory it was working in even when "--no-index" option was used. It no longer does this. The "--exclude-standard" option needs to be given to explicitly activate the ignore mechanism. * "git grep" learned "--untracked" option, where given patterns are searched in untracked (but not ignored) files as well as tracked files in the working tree, so that matches in new but not yet added files do not get missed. * The recursive merge backend no longer looks for meaningless existing merges in submodules unless in the outermost merge. * "git log" and friends learned "--children" option. * "git ls-remote" learned to respond to "-h"(elp) requests. * "mediawiki" remote helper can interact with (surprise!) MediaWiki with "git fetch" & "git push". * "git merge" learned the "--edit" option to allow users to edit the merge commit log message. * "git rebase -i" can be told to use special purpose editor suitable only for its insn sheet via sequence.editor configuration variable. * "git send-email" learned to respond to "-h"(elp) requests. * "git send-email" allows the value given to sendemail.aliasfile to begin with "~/" to refer to the $HOME directory. * "git send-email" forces use of Authen::SASL::Perl to work around issues between Authen::SASL::Cyrus and AUTH PLAIN/LOGIN. * "git stash" learned "--include-untracked" option to stash away untracked/ignored cruft from the working tree. * "git submodule clone" does not leak an error message to the UI level unnecessarily anymore. * "git submodule update" learned to honor "none" as the value for submodule..update to specify that the named submodule should not be checked out by default. * When populating a new submodule directory with "git submodule init", the $GIT_DIR metainformation directory for submodules is created inside $GIT_DIR/modules// directory of the superproject and referenced via the gitfile mechanism. This is to make it possible to switch between commits in the superproject that has and does not have the submodule in the tree without re-cloning. * "gitweb" leaked unescaped control characters from syntax hiliter outputs. * "gitweb" can be told to give custom string at the end of the HTML HEAD element. * "gitweb" now has its own manual pages. Also contains other documentation updates and minor code cleanups. Fixes since v1.7.7 ------------------ Unless otherwise noted, all fixes in the 1.7.7.X maintenance track are included in this release. * HTTP transport did not use pushurl correctly, and also did not tell what host it is trying to authenticate with when asking for credentials. (merge deba493 jk/http-auth later to maint). * "git blame" was aborted if started from an uncommitted content and the path had the textconv filter in effect. (merge 8518088 ss/blame-textconv-fake-working-tree later to maint). * Adding many refs to the local repository in one go (e.g. "git fetch" that fetches many tags) and looking up a ref by name in a repository with too many refs were unnecessarily slow. (merge 17d68a54d jp/get-ref-dir-unsorted later to maint). * Report from "git commit" on untracked files was confused under core.ignorecase option. (merge 395c7356 jk/name-hash-dirent later to maint). * "git merge" did not understand ":/" as a way to name a commit. " "git push" on the receiving end used to call post-receive and post-update hooks for attempted removal of non-existing refs. (merge 160b81ed ph/push-to-delete-nothing later to maint). * Help text for "git remote set-url" and "git remote set-branches" were misspelled. (merge c49904e fc/remote-seturl-usage-fix later to maint). (merge 656cdf0 jc/remote-setbranches-usage-fix later to maint). Git v1.7.7 Release Notes ======================== Updates since v1.7.6 -------------------- * The scripting part of the codebase is getting prepared for i18n/l10n. * Interix, Cygwin and Minix ports got updated. * Various updates to git-p4 (in contrib/), fast-import, and git-svn. * Gitweb learned to read from /etc/gitweb-common.conf when it exists, before reading from gitweb_config.perl or from /etc/gitweb.conf (this last one is read only when per-repository gitweb_config.perl does not exist). * Various codepaths that invoked zlib deflate/inflate assumed that these functions can compress or uncompress more than 4GB data in one call on platforms with 64-bit long, which has been corrected. * Git now recognizes loose objects written by other implementations that use a non-standard window size for zlib deflation (e.g. Agit running on Android with 4kb window). We used to reject anything that was not deflated with 32kb window. * Interaction between the use of pager and coloring of the output has been improved, especially when a command that is not built-in was involved. * "git am" learned to pass the "--exclude=" option through to underlying "git apply". * You can now feed many empty lines before feeding an mbox file to "git am". * "git archive" can be told to pass the output to gzip compression and produce "archive.tar.gz". * "git bisect" can be used in a bare repository (provided that the test you perform per each iteration does not need a working tree, of course). * The length of abbreviated object names in "git branch -v" output now honors the core.abbrev configuration variable. * "git check-attr" can take relative paths from the command line. * "git check-attr" learned an "--all" option to list the attributes for a given path. * "git checkout" (both the code to update the files upon checking out a different branch and the code to checkout a specific set of files) learned to stream the data from object store when possible, without having to read the entire contents of a file into memory first. An earlier round of this code that is not in any released version had a large leak but now it has been plugged. * "git clone" can now take a "--config key=value" option to set the repository configuration options that affect the initial checkout. * "git commit ..." now lets you feed relative pathspecs that refer to outside your current subdirectory. * "git diff --stat" learned a --stat-count option to limit the output of a diffstat report. * "git diff" learned a "--histogram" option to use a different diff generation machinery stolen from jgit, which might give better performance. * "git diff" had a weird worst case behaviour that can be triggered when comparing files with potentially many places that could match. * "git fetch", "git push" and friends no longer show connection errors for addresses that couldn't be connected to when at least one address succeeds (this is arguably a regression but a deliberate one). * "git grep" learned "--break" and "--heading" options, to let users mimic the output format of "ack". * "git grep" learned a "-W" option that shows wider context using the same logic used by "git diff" to determine the hunk header. * Invoking the low-level "git http-fetch" without "-a" option (which git itself never did---normal users should not have to worry about this) is now deprecated. * The "--decorate" option to "git log" and its family learned to highlight grafted and replaced commits. * "git rebase master topci" no longer spews usage hints after giving the "fatal: no such branch: topci" error message. * The recursive merge strategy implementation got a fairly large fix for many corner cases that may rarely happen in real world projects (it has been verified that none of the 16000+ merges in the Linux kernel history back to v2.6.12 is affected with the corner case bugs this update fixes). * "git stash" learned an "--include-untracked option". * "git submodule update" used to stop at the first error updating a submodule; it now goes on to update other submodules that can be updated, and reports the ones with errors at the end. * "git push" can be told with the "--recurse-submodules=check" option to refuse pushing of the supermodule, if any of its submodules' commits hasn't been pushed out to their remotes. * "git upload-pack" and "git receive-pack" learned to pretend that only a subset of the refs exist in a repository. This may help a site to put many tiny repositories into one repository (this would not be useful for larger repositories as repacking would be problematic). * "git verify-pack" has been rewritten to use the "index-pack" machinery that is more efficient in reading objects in packfiles. * test scripts for gitweb tried to run even when CGI-related perl modules are not installed; they now exit early when the latter are unavailable. Also contains various documentation updates and minor miscellaneous changes. Fixes since v1.7.6 ------------------ Unless otherwise noted, all fixes in the 1.7.6.X maintenance track are included in this release. * "git branch -m" and "git checkout -b" incorrectly allowed the tip of the branch that is currently checked out updated. Git v1.7.6 Release Notes ======================== Updates since v1.7.5 -------------------- * Various git-svn updates. * Updates the way content tags are handled in gitweb. Also adds a UI to choose common timezone for displaying the dates. * Similar to branch names, tagnames that begin with "-" are now disallowed. * Clean-up of the C part of i18n (but not l10n---please wait) continues. * The scripting part of the codebase is getting prepared for i18n/l10n. * Pushing and pulling from a repository with large number of refs that point to identical commits are optimized by not listing the same commit during the common ancestor negotiation exchange with the other side. * Adding a file larger than core.bigfilethreshold (defaults to 1/2 Gig) using "git add" will send the contents straight to a packfile without having to hold it and its compressed representation both at the same time in memory. * Processes spawned by "[alias] = !process" in the configuration can inspect GIT_PREFIX environment variable to learn where in the working tree the original command was invoked. * A magic pathspec ":/" tells a command that limits its operation to the current directory when ran from a subdirectory to work on the entire working tree. In general, ":/path/to/file" would be relative to the root of the working tree hierarchy. After "git reset --hard; edit Makefile; cd t/", "git add -u" would be a no-op, but "git add -u :/" would add the updated contents of the Makefile at the top level. If you want to name a path in the current subdirectory whose unusual name begins with ":/", you can name it by "./:/that/path" or by "\:/that/path". * "git blame" learned "--abbrev[=]" option to control the minimum number of hexdigits shown for commit object names. * "git blame" learned "--line-porcelain" that is less efficient but is easier to parse. * Aborting "git commit --interactive" discards updates to the index made during the interactive session. * "git commit" learned a "--patch" option to directly jump to the per-hunk selection UI of the interactive mode. * "git diff" and its family of commands learned --dirstat=0 to show directories that contribute less than 0.1% of changes. * "git diff" and its family of commands learned --dirstat=lines mode to assess damage to the directory based on number of lines in the patch output, not based on the similarity numbers. * "git format-patch" learned "--quiet" option to suppress the output of the names of generated files. * "git format-patch" quotes people's names when it has RFC822 special characters in it, e.g. "Junio C. Hamano" . Earlier it was up to the user to do this when using its output. * "git format-patch" can take an empty --subject-prefix now. * "git grep" learned the "-P" option to take pcre regular expressions. * "git log" and friends learned a new "--notes" option to replace the "--show-notes" option. Unlike "--show-notes", "--notes=" does not imply showing the default notes. * They also learned a log.abbrevCommit configuration variable to augment the --abbrev-commit command line option. * "git ls-remote" learned "--exit-code" option to consider it a different kind of error when no remote ref to be shown. * "git merge" learned "-" as a short-hand for "the previous branch", just like the way "git checkout -" works. * "git merge" uses "merge.ff" configuration variable to decide to always create a merge commit (i.e. --no-ff, aka merge.ff=no), refuse to create a merge commit (i.e. --ff-only, aka merge.ff=only). Setting merge.ff=yes (or not setting it at all) restores the default behaviour of allowing fast-forward to happen when possible. * p4-import (from contrib) learned a new option --preserve-user. * "git read-tree -m" learned "--dry-run" option that reports if a merge would fail without touching the index nor the working tree. * "git rebase" that does not specify on top of which branch to rebase the current branch now uses @{upstream} of the current branch. * "git rebase" finished either normally or with --abort did not update the reflog for HEAD to record the event to come back to where it started from. * "git remote add -t only-this-branch --mirror=fetch" is now allowed. Earlier a fetch-mode mirror meant mirror everything, but now it only means refs are not renamed. * "git rev-list --count" used with "--cherry-mark" counts the cherry-picked commits separately, producing more a useful output. * "git submodule update" learned "--force" option to get rid of local changes in submodules and replace them with the up-to-date version. * "git status" and friends ignore .gitmodules file while the file is still in a conflicted state during a merge, to avoid using information that is not final and possibly corrupt with conflict markers. Also contains various documentation updates and minor miscellaneous changes. Fixes since v1.7.5 ------------------ Unless otherwise noted, all the fixes in 1.7.5.X maintenance track are included in this release. * "git config" used to choke with an insanely long line. (merge ef/maint-strbuf-init later) * "git diff --quiet" did not work well with --diff-filter. (merge jk/diff-not-so-quick later) * "git status -z" did not default to --porcelain output format. (merge bc/maint-status-z-to-use-porcelain later)