* The submodule support has Porcelain layer.
+ Note that the current submodule support is minimal and this is
+ deliberately so. A design decision we made is that operations
+ at the supermodule level do not recurse into submodules by
+ default. The expectation is that later we would add a
+ mechanism to tell git which submodules the user is interested
+ in, and this information might be used to determine the
+ recursive behaviour of certain commands (e.g. "git checkout"
+ and "git diff"), but currently we haven't agreed on what that
+ mechanism should look like. Therefore, if you use submodules,
+ you would probably need "git submodule update" on the
+ submodules you care about after running a "git checkout" at
+ the supermodule level.
+
* There are a handful pack-objects changes to help you cope better
with repositories with pathologically large blobs in them.
* For people who need to import from Perforce, a front-end for
fast-import is in contrib/fast-import/.
-* Comes with git-gui 0.8.0.
+* Comes with git-gui 0.8.2.
* Comes with updated gitk.
* New commands and options.
+ - "git log --date=<format>" can use more formats: iso8601, rfc2822.
+
- The hunk header output from "git diff" family can be customized
with the attributes mechanism. See gitattributes(5) for details.
- "git rebase" learned an "interactive" mode that let you
pick and reorder which commits to rebuild.
- - "git fsck" can save its findings in $GIT_DIR/lost-found,
- without a separate invocation of "git lost-found" command.
+ - "git fsck" can save its findings in $GIT_DIR/lost-found, without a
+ separate invocation of "git lost-found" command. The blobs stored by
+ lost-found are stored in plain format to allow you to grep in them.
- $GIT_WORK_TREE environment variable can be used together with
$GIT_DIR to work in a subdirectory of a working tree that is
not located at "$GIT_DIR/..".
+ - Giving "--file=<file>" option to "git config" is the same as
+ running the command with GIT_CONFIG=<file> environment.
+
- "git log" learned a new option "--follow", to follow
renaming history of a single file.
- - "git-filter-branch" lets you rewrite the revision history of
- the current branch, creating a new branch. You can specify a
- number of filters to modify the commits, files and trees.
+ - "git filter-branch" lets you rewrite the revision history of
+ specified branches. You can specify a number of filters to
+ modify the commits, files and trees.
+
+ - "git cvsserver" learned new options (--base-path, --export-all,
+ --strict-paths) inspired by "git daemon".
+
+ - "git daemon --base-path-relaxed" can help migrating a repository URL
+ that did not use to use --base-path to use --base-path.
- - "git-cvsserver" learned new options (--base-path, --export-all,
- --strict-paths) inspired by git-daemon.
+ - "git commit" can use "-t templatefile" option and commit.template
+ configuration variable to prime the commit message given to you in the
+ editor.
- - "git-submodule" command helps you manage the projects from
+ - "git submodule" command helps you manage the projects from
the superproject that contain them.
- In addition to core.compression configuration option,
independently tweak zlib compression levels used for loose
and packed objects.
- - "git-ls-tree -l" shows size of blobs pointed at by the
+ - "git ls-tree -l" shows size of blobs pointed at by the
tree entries, similar to "/bin/ls -l".
- - "git-rev-list" learned --regexp-ignore-case and
+ - "git rev-list" learned --regexp-ignore-case and
--extended-regexp options to tweak its matching logic used
for --grep fitering.
- - "git-describe --contains" is a handier way to call more
- obscure command "git-name-rev --tags".
+ - "git describe --contains" is a handier way to call more
+ obscure command "git name-rev --tags".
- "git gc --aggressive" tells the command to spend more cycles
to optimize the repository harder.
+ - "git repack" learned a "window-memory" limit which
+ dynamically reduces the window size to stay within the
+ specified memory usage.
+
- "git repack" can be told to split resulting packs to avoid
exceeding limit specified with "--max-pack-size".
- "git send-email" can be told not to thread the messages when
sending out more than one patches.
+ - "git send-email" can also be told how to find whom to cc the
+ message to for each message via --cc-cmd.
+
- "git config" learned NUL terminated output format via -z to
help scripts.
+ - "git add" learned "--refresh <paths>..." option to selectively refresh
+ the cached stat information.
+
- "git init -q" makes the command quieter.
+ - "git -p command" now has a cousin of opposite sex, "git --no-pager
+ command".
+
* Updated behavior of existing commands.
+ - "gitweb" can offer multiple snapshot formats.
+
+ ***NOTE*** Unfortunately, this changes the format of the
+ $feature{snapshot}{default} entry in the per-site
+ configuration file 'gitweb_config.perl'. It used to be a
+ three-element tuple that describe a single format; with the
+ new configuration item format, you only have to say the name
+ of the format ('tgz', 'tbz2' or 'zip'). Please update the
+ your configuration file accordingly.
+
+ - "git clone" uses -l (hardlink files under .git) by default when
+ cloning locally.
+
+ - URL used for "git clone" and friends can specify nonstandard SSH port
+ by using ssh://host:port/path/to/repo syntax.
+
+ - "git bundle create" can now create a bundle without negative refs,
+ i.e. "everything since the beginning up to certain points".
+
+ - "git diff" (but not the plumbing level "git diff-tree") now
+ recursively descends into trees by default.
+
+ - "git diff" does not show differences that come only from
+ stat-dirtiness in the form of "diff --git" header anymore.
+ It runs "update-index --refresh" silently as needed.
+
+ - "git tag -l" used to match tags by globbing its parameter as if it
+ has wildcard '*' on both ends, which made "git tag -l gui" to match
+ tag 'gitgui-0.7.0'; this was very annoying. You now have to add
+ asterisk on the sides you want to wildcard yourself.
+
+ - The editor to use with many interactive commands can be
+ overridden with GIT_EDITOR environment variable, or if it
+ does not exist, with core.editor configuration variable. As
+ before, if you have neither, environment variables VISUAL
+ and EDITOR are consulted in this order, and then finally we
+ fall back on "vi".
+
+ - "git rm --cached" does not complain when removing a newly
+ added file from the index anymore.
+
+ - Options to "git log" to affect how --grep/--author options look for
+ given strings now have shorter abbreviations. -i is for ignore case,
+ and -E is for extended regexp.
+
+ - "git log" learned --log-size to show the number of bytes in
+ the log message part of the output to help qgit.
+
+ - "git log --name-status" does not require you to give "-r" anymore.
+ As a general rule, Porcelain commands should recurse when showing
+ diff.
+
+ - "git format-patch --root A" can be used to format everything
+ since the beginning up to A. This was supported with
+ "git format-patch --root A A" for a long time, but was not
+ properly documented.
+
- "git svn dcommit" retains local merge information.
+ - "git svnimport" allows an empty string to be specified as the
+ trunk/ directory. This is necessary to suck data from a SVN
+ repository that doe not have trunk/ branches/ and tags/ organization
+ at all.
+
- "git config" to set values also honors type flags like --bool
and --int.
and the handcrafted ones the old code created was not
properly formed anyway.
- - "git-push" pretends that you immediately fetched back from
+ - "git push" pretends that you immediately fetched back from
the remote by updating corresponding remote tracking
branches if you have any.
- The diffstat given after a merge (or a pull) honors the
color.diff configuration.
- - "git-apply --whitespace=strip" removes blank lines added at
+ - "git commit --amend" is now compatible with various message source
+ options such as -m/-C/-c/-F.
+
+ - "git apply --whitespace=strip" removes blank lines added at
the end of the file.
- - "git-fetch" over git native protocols with "-v" option shows
+ - "git fetch" over git native protocols with "-v" option shows
connection status, and the IP address of the other end, to
help diagnosing problems.
- "--find-copies-harder" option to diff family can now be
spelled as "-C -C" for brevity.
- - "git-mailsplit" (hence "git-am") can read from Maildir
+ - "git mailsplit" (hence "git am") can read from Maildir
formatted mailboxes.
- - "git-cvsserver" does not barf upon seeing "cvs login"
+ - "git cvsserver" does not barf upon seeing "cvs login"
request.
- "pack-objects" honors "delta" attribute set in
- "new-workdir" script (in contrib) can now be used with a
bare repository.
- - "git-mergetool" learned to use gvimdiff.
+ - "git mergetool" learned to use gvimdiff.
- "gitview" (in contrib) has a better blame interface.
concatenate them into a single line and treat the result as
"oneline".
+ - "git p4import" has been demoted to contrib status. For
+ a superior option, checkout the "git p4" front end to
+ "git fast-import" (also in contrib). The man page and p4
+ rpm have been removed as well.
+
+ - "git mailinfo" (hence "am") now tries to see if the message
+ is in utf-8 first, instead of assuming iso-8859-1, if
+ incoming e-mail does not say what encoding it is in.
+
* Builds
- old-style function definitions (most notably, a function
without parameter defined with "func()", not "func(void)")
have been eradicated.
+ - "git tag" and "git verify-tag" have been rewritten in C.
+
* Performance Tweaks
- - git-pack-objects avoids re-deltification cost by caching
+ - "git pack-objects" avoids re-deltification cost by caching
small enough delta results it creates while looking for the
best delta candidates.
- - git-pack-objects learned a new heuristcs to prefer delta
+ - "git pack-objects" learned a new heuristcs to prefer delta
that is shallower in depth over the smallest delta
possible. This improves both overall packfile access
performance and packfile density.
- verifying pack contents done by "git fsck --full" got boost
by carefully choosing the order to verify objects in them.
+ - "git read-tree -m" to read into an already populated index
+ has been optimized vastly. The effect of this can be seen
+ when switching branches that have differences in only a
+ handful paths.
+
+ - "git add paths..." and "git commit paths..." has also been
+ heavily optimized.
Fixes since v1.5.2
------------------
- "gitweb" had trouble handling non UTF-8 text with older
Encode.pm Perl module.
---
-exec >/var/tmp/1
-O=v1.5.3-rc1
-echo O=`git describe refs/heads/master`
-git shortlog --no-merges $O..refs/heads/master ^refs/heads/maint
+ - "git svn" misparsed the data from the commits in the repository when
+ the user had "color.diff = true" in the configuration. This has been
+ fixed.
+
+ - There was a case where "git svn dcommit" clobbered changes made on the
+ SVN side while committing multiple changes.
+
+ - "git-write-tree" had a bad interaction with racy-git avoidance and
+ gitattributes mechanisms.
+
+ - "git --bare command" overrode existing GIT_DIR setting and always
+ made it treat the current working directory as GIT_DIR.
+
+ - "git ls-files --error-unmatch" does not complain if you give the
+ same path pattern twice by mistake.
+
+ - "git init" autodetected core.filemode but not core.symlinks, which
+ made a new directory created automatically by "git clone" cumbersome
+ to use on filesystems that require these configurations to be set.
+
+ - "git log" family of commands behaved differently when run as "git
+ log" (no pathspec) and as "git log --" (again, no pathspec). This
+ inconsistency was introduced somewhere in v1.3.0 series but now has
+ been corrected.
+
+ - "git rebase -m" incorrectly displayed commits that were skipped.