| Git v2.0 Release Notes |
| ====================== |
| |
| Backward compatibility notes |
| ---------------------------- |
| |
| When "git push [$there]" does not say what to push, we have used the |
| traditional "matching" semantics so far (all your branches were sent |
| to the remote as long as there already are branches of the same name |
| over there). In Git 2.0, the default is now the "simple" semantics, |
| which pushes: |
| |
| - only the current branch to the branch with the same name, and only |
| when the current branch is set to integrate with that remote |
| branch, if you are pushing to the same remote as you fetch from; or |
| |
| - only the current branch to the branch with the same name, if you |
| are pushing to a remote that is not where you usually fetch from. |
| |
| You can use the configuration variable "push.default" to change |
| this. If you are an old-timer who wants to keep using the |
| "matching" semantics, you can set the variable to "matching", for |
| example. Read the documentation for other possibilities. |
| |
| When "git add -u" and "git add -A" are run inside a subdirectory |
| without specifying which paths to add on the command line, they |
| operate on the entire tree for consistency with "git commit -a" and |
| other commands (these commands used to operate only on the current |
| subdirectory). Say "git add -u ." or "git add -A ." if you want to |
| limit the operation to the current directory. |
| |
| "git add <path>" is the same as "git add -A <path>" now, so that |
| "git add dir/" will notice paths you removed from the directory and |
| record the removal. In older versions of Git, "git add <path>" used |
| to ignore removals. You can say "git add --ignore-removal <path>" to |
| add only added or modified paths in <path>, if you really want to. |
| |
| The "-q" option to "git diff-files", which does *NOT* mean "quiet", |
| has been removed (it told Git to ignore deletion, which you can do |
| with "git diff-files --diff-filter=d"). |
| |
| "git request-pull" lost a few "heuristics" that often led to mistakes. |
| |
| |
| Updates since v1.9 series |
| ------------------------- |
| |
| UI, Workflows & Features |
| |
| * "git commit --cleanup=<mode>" learned a new mode, scissors. |
| |
| * "git tag --list" output can be sorted using "version sort" with |
| "--sort=version:refname". |
| |
| * Discard the accumulated "heuristics" to guess from which branch the |
| result wants to be pulled from and make sure what the end user |
| specified is not second-guessed by "git request-pull", to avoid |
| mistakes. When you pushed out your 'master' branch to your public |
| repository as 'for-linus', use the new "master:for-linus" syntax to |
| denote the branch to be pulled. |
| |
| * "git grep" learned to behave in a way similar to native grep when |
| "-h" (no header) and "-c" (count) options are given. |
| |
| * transport-helper, fast-import and fast-export have been updated to |
| allow the ref mapping and ref deletion in a way similar to the |
| natively supported transports. |
| |
| * The "simple" mode is the default for "git push". |
| |
| * "git add -u" and "git add -A", when run without any pathspec, is a |
| tree-wide operation even when run inside a subdirectory of a |
| working tree. |
| |
| * "git add <path> is the same as "git add -A <path>" now. |
| |
| * "core.statinfo" configuration variable, which is a |
| never-advertised synonym to "core.checkstat", has been removed. |
| |
| * The "-q" option to "git diff-files", which does *NOT* mean |
| "quiet", has been removed (it told Git to ignore deletion, which |
| you can do with "git diff-files --diff-filter=d"). |
| |
| * Server operators can loosen the "tips of refs only" restriction for |
| the remote archive service with the uploadarchive.allowUnreachable |
| configuration option. |
| |
| * The progress indicators from various time-consuming commands have |
| been marked for i18n/l10n. |
| |
| * "git notes -C <blob>" diagnoses an attempt to use an object that |
| is not a blob as an error. |
| |
| * "git config" learned to read from the standard input when "-" is |
| given as the value to its "--file" parameter (attempting an |
| operation to update the configuration in the standard input of |
| course is rejected). |
| |
| * Trailing whitespaces in .gitignore files, unless they are quoted |
| for fnmatch(3), e.g. "path\ ", are warned and ignored. Strictly |
| speaking, this is a backward incompatible change, but very unlikely |
| to bite any sane user and adjusting should be obvious and easy. |
| |
| * Many commands that create commits, e.g. "pull", "rebase", |
| learned to take the --gpg-sign option on the command line. |
| |
| * "git commit" can be told to always GPG sign the resulting commit |
| by setting "commit.gpgsign" configuration variable to true (the |
| command line option --no-gpg-sign should override it). |
| |
| * "git pull" can be told to only accept fast-forward by setting the |
| new "pull.ff" configuration. |
| |
| * "git reset" learned "-N" option, which does not reset the index |
| fully for paths the index knows about but the tree-ish the command |
| resets to does not (these paths are kept as intend-to-add entries). |
| |
| * Newly cloned submodule repositories by "git submodule update", |
| when the "checkout" update mode is used, will be on a local |
| branch instead of on a detached HEAD, just like submodules added |
| with "git submodule add". |
| |
| |
| Performance, Internal Implementation, etc. |
| |
| * We started using wildmatch() in place of fnmatch(3) a few releases |
| ago; complete the process and stop using fnmatch(3). |
| |
| * Uses of curl's "multi" interface and "easy" interface do not mix |
| well when we attempt to reuse outgoing connections. Teach the RPC |
| over http code, used in the smart HTTP transport, not to use the |
| "easy" interface. |
| |
| * The bitmap-index feature from JGit has been ported, which should |
| significantly improve performance when serving objects form a |
| repository that uses it. |
| |
| * The way "git log --cc" shows a combined diff against multiple |
| parents have been optimized. |
| |
| * The prefixcmp() and suffixcmp() functions are gone. Use |
| starts_with() and ends_with(), and also consider if skip_prefix() |
| suits your needs better when using the former. |
| |
| |
| Also contains various documentation updates and code clean-ups. Many |
| of them came from flurry of activities as GSoC candidate microproject |
| exercises. |
| |
| |
| Fixes since v1.9 series |
| ----------------------- |
| |
| Unless otherwise noted, all the fixes since v1.9 in the maintenance |
| track are contained in this release (see the maintenance releases' |
| notes for details). |
| |
| * "git mv" that moves a submodule forgot to adjust the array that |
| uses to keep track of which submodules were to be moved to update |
| its configuration. |
| (merge fb8a4e8 jk/mv-submodules-fix later to maint). |
| |
| * Length limit for the pathname used when removing a path in a deep |
| subdirectory has been removed to avoid buffer overflows. |
| (merge 2f29e0c mh/remove-subtree-long-pathname-fix later to maint). |
| |
| * The test helper lib-terminal always run an actual test_expect_* |
| when included, which screwed up with the use of skil-all that may |
| have to be done later. |
| (merge 7e27173 jk/lib-terminal-lazy later to maint). |
| |
| * "git index-pack" used a wrong variable to name the keep-file in an |
| error message when the file cannot be written or closed. |
| (merge de983a0 nd/index-pack-error-message later to maint). |
| |
| * "rebase -i" produced a broken insn sheet when the title of a commit |
| happened to contain '\n' (or ended with '\c') due to a careless use |
| of 'echo'. |
| (merge cb1aefd us/printf-not-echo later to maint). |
| |
| * There were a few instances of 'git-foo' remaining in the |
| documentation that should have been spelled 'git foo'. |
| (merge 3c3e6f5 rr/doc-merge-strategies later to maint). |
| |
| * Serving objects from a shallow repository needs to write a |
| new file to hold the temporary shallow boundaries but it was not |
| cleaned when we exit due to die() or a signal. |
| (merge 7839632 jk/shallow-update-fix later to maint). |
| |
| * When "git stash pop" stops after failing to apply the stash |
| (e.g. due to conflicting changes), the stash is not dropped. State |
| that explicitly in the output to let the users know. |
| (merge 2d4c993 jc/stash-pop-not-popped later to maint). |
| |
| * The labels in "git status" output that describe the nature of |
| conflicts (e.g. "both deleted") were limited to 20 bytes, which was |
| too short for some l10n (e.g. fr). |
| (merge c7cb333 jn/wt-status later to maint). |
| |
| * "git clean -d pathspec" did not use the given pathspec correctly |
| and ended up cleaning too much. |
| (merge 1f2e108 jk/clean-d-pathspec later to maint). |
| |
| * "git difftool" misbehaved when the repository is bound to the |
| working tree with the ".git file" mechanism, where a textual file |
| ".git" tells us where it is. |
| (merge fcfec8b da/difftool-git-files later to maint). |
| |
| * "git push" did not pay attention to branch.*.pushremote if it is |
| defined earlier than remote.pushdefault; the order of these two |
| variables in the configuration file should not matter, but it did |
| by mistake. |
| (merge 98b406f jk/remote-pushremote-config-reading later to maint). |
| |
| * Codepaths that parse timestamps in commit objects have been |
| tightened. |
| (merge 3f419d4 jk/commit-dates-parsing-fix later to maint). |
| |
| * "git diff --external-diff" incorrectly fed the submodule directory |
| in the working tree to the external diff driver when it knew it is |
| the same as one of the versions being compared. |
| (merge aba4727 tr/diff-submodule-no-reuse-worktree later to maint). |
| |
| * "git reset" needs to refresh the index when working in a working |
| tree (it can also be used to match the index to the HEAD in an |
| otherwise bare repository), but it failed to set up the working |
| tree properly, causing GIT_WORK_TREE to be ignored. |
| (merge b7756d4 nd/reset-setup-worktree later to maint). |
| |
| * "git check-attr" when working on a repository with a working tree |
| did not work well when the working tree was specified via the |
| --work-tree (and obviously with --git-dir) option. |
| (merge cdbf623 jc/check-attr-honor-working-tree later to maint). |
| |
| * "merge-recursive" was broken in 1.7.7 era and stopped working in |
| an empty (temporary) working tree, when there are renames |
| involved. This has been corrected. |
| (merge 6e2068a bk/refresh-missing-ok-in-merge-recursive later to maint.) |
| |
| * "git rev-parse" was loose in rejecting command line arguments |
| that do not make sense, e.g. "--default" without the required |
| value for that option. |
| (merge a43219f ds/rev-parse-required-args later to maint.) |
| |
| * include.path variable (or any variable that expects a path that |
| can use ~username expansion) in the configuration file is not a |
| boolean, but the code failed to check it. |
| (merge 67beb60 jk/config-path-include-fix later to maint.) |
| |
| * Commands that take pathspecs on the command line misbehaved when |
| the pathspec is given as an absolute pathname (which is a |
| practice not particularly encouraged) that points at a symbolic |
| link in the working tree. |
| (merge later 655ee9e mw/symlinks to maint.) |
| |
| * "git diff --quiet -- pathspec1 pathspec2" sometimes did not return |
| correct status value. |
| (merge f34b205 nd/diff-quiet-stat-dirty later to maint.) |
| |
| * Attempting to deepen a shallow repository by fetching over smart |
| HTTP transport failed in the protocol exchange, when no-done |
| extension was used. The fetching side waited for the list of |
| shallow boundary commits after the sending end stopped talking to |
| it. |
| (merge 0232852 nd/http-fetch-shallow-fix later to maint.) |
| |
| * Allow "git cmd path/", when the 'path' is where a submodule is |
| bound to the top-level working tree, to match 'path', despite the |
| extra and unnecessary trailing slash (such a slash is often |
| given by command line completion). |
| (merge 2e70c01 nd/submodule-pathspec-ending-with-slash later to maint.) |