-Git v1.7.5 Release Notes (draft)
+Git v1.7.5 Release Notes
========================
Updates since v1.7.4
* Various git-p4 enhancements (in contrib).
- * Various vcs-svn enhancements.
+ * Various vcs-svn, git-svn and gitk enhancements and fixes.
+
+ * Various git-gui updates (0.14.0).
+
+ * Update to more modern HP-UX port.
+
+ * The codebase is getting prepared for i18n/l10n; no translated
+ strings nor translation mechanism in the code yet, but the strings
+ are being marked for l10n.
+
+ * The bash completion script can now complete symmetric difference
+ for "git diff" command, e.g. "git diff ...bra<TAB>".
+
+ * The default minimum length of abbreviated and unique object names
+ can now be configured by setting the core.abbrev configuration
+ variable.
+
+ * "git apply -v" reports offset lines when the patch does not apply at
+ the exact location recorded in the diff output.
* "git config" used to be also known as "git repo-config", but the old
name is now officially deprecated.
* "git checkout --detach <commit>" is a more user friendly synonym for
"git checkout <commit>^0".
- * "git cherry-pick" and "git revert" can be told to use custom merge
+ * "git checkout" performed on detached HEAD gives a warning and
+ advice when the commit being left behind will become unreachable from
+ any branch or tag.
+
+ * "git cherry-pick" and "git revert" can be told to use a custom merge
strategy, similar to "git rebase".
* "git cherry-pick" remembers which commit failed to apply when it is
stopped by conflicts, making it unnecessary to use "commit -c $commit"
to conclude it.
+ * "git cvsimport" bails out immediately when the cvs server cannot be
+ reached, without spewing unnecessary error messages that complain about
+ the server response it never got.
+
+ * "git fetch" vs "git upload-pack" transfer learned 'no-done'
+ protocol extension to save one round-trip after the content
+ negotiation is done. This saves one HTTP RPC, reducing the overall
+ latency for a trivial fetch.
+
+ * "git fetch" can be told to recursively fetch submodules on-demand.
+
+ * "git grep -f <filename>" learned to treat "-" as "read from the
+ standard input stream".
+
* "git grep --no-index" did not honor pathspecs correctly, returning
paths outside the specified area.
- * "git rev-list --objects $revs -- $pathspec" would limit the objects listed
- in its output properly with the pathspec, in preparation for narrow
- clones.
+ * "git init" learned the --separate-git-dir option to allow the git
+ directory for a new repository created elsewhere and linked via the
+ gitdir mechanism. This is primarily to help submodule support later
+ to switch between a branch of superproject that has the submodule
+ and another that does not.
- * "git log" family of commands now understand globbing pathspecs. You
+ * "git log" type commands now understand globbing pathspecs. You
can say "git log -- '*.txt'" for example.
- * "git rerere" learned a new subcommand "remaining", that is similar to
- "status" that lists the paths that had conflicts that are known to
- rerere, but excludes the paths that have already been marked as
- resolved in the index from its output. "git mergetool" has been
- updated to use this facility.
+ * "git log" family of commands learned --cherry and --cherry-mark
+ options that can be used to view two diverged branches while omitting
+ or highlighting equivalent changes that appear on both sides of a
+ symmetric difference (e.g. "log --cherry A...B").
+
+ * A lazy "git merge" that didn't say what to merge used to be an error.
+ When run on a branch that has an upstream defined, however, the command
+ now merges from the configured upstream.
+
+ * "git mergetool" learned how to drive "beyond compare 3" as well.
+
+ * "git rerere forget" without pathspec used to forget all the saved
+ conflicts that relate to the current merge; it now requires you to
+ give it pathspecs.
+
+ * "git rev-list --objects $revs -- $pathspec" now limits the objects listed
+ in its output properly with the pathspec, in preparation for narrow
+ clones.
+
+ * "git push" with no parameters gives better advice messages when
+ "tracking" is used as the push.default semantics or there is no remote
+ configured yet.
* A possible value to the "push.default" configuration variable,
'tracking', gained a synonym that more naturally describes what it
does, 'upstream'.
+ * "git rerere" learned a new subcommand "remaining" that is similar to
+ "status" and lists the paths that had conflicts which are known to
+ rerere, but excludes the paths that have already been marked as
+ resolved in the index from its output. "git mergetool" has been
+ updated to use this facility.
+
Also contains various documentation updates.
All of the fixes in the v1.7.4.X maintenance series are included in this
release, unless otherwise noted.
- * "git clone /no/such/path" did not fail correctly (jk/fail-null/clone).
-
- * "git checkout $other_branch" silently removed untracked symbolic links
- in the working tree that are in the way in order to check out paths
- under it from the named branch (js/checkout-untracked-symlink).
-
- * "git diff --stat -B" ran on binary files counted the changes in lines,
- which was nonsensical (jk/diffstat-binary).
-
- * "git diff -M" opportunisticly detected copies, which was not
- necessarily a good thing, especially when it is internally run by
- recursive merge.
-
- * "git merge" triggers prepare-commit-msg hook. Earlier, only "git
- commit" to conclude an interrupted merge triggered the hook, leading to
- an inconsistent overall user experience (js/maint-merge-use-prepare-commit-msg-hook).
-
- * "git submodule update" used to honor --merge/--rebase option (or
- corresponding configuration variables) even for a newly cloned
- subprojects, which made no sense (so/submodule-no-update-first-time).
-
----
-exec >/var/tmp/1
-O=v1.7.4.1-224-g66ecd2d
-echo O=$(git describe 'master')
-git shortlog --no-merges ^maint ^$O master
+ * "git fetch" from a client that is mostly following the remote
+ needlessly told all of its refs to the server for both sides to
+ compute the set of objects that need to be transferred efficiently,
+ instead of stopping when the server heard enough. In a project with
+ many tags, this turns out to be extremely wasteful, especially over
+ the smart HTTP transport (sp/maint-{upload,fetch}-pack-stop-early~1).
+
+ * "git fetch" run from a repository that uses the same repository as
+ its alternate object store as the repository it is fetching from
+ did not tell the server that it already has access to objects
+ reachable from the refs in their common alternate object store,
+ causing it to fetch unnecessary objects (jc/maint-fetch-alt).
+
+ * "git remote add --mirror" created a configuration that is suitable for
+ doing both a mirror fetch and a mirror push at the same time, which
+ made little sense. We now warn and require the command line to specify
+ either --mirror=fetch or --mirror=push.