On the 13th June, Git 2.9 was released, and you can read all about it in the official release notes,and a whole host of other places, such as Softpedia. So, instead of simply going over the release notes, I'd like to take a look at the improvements and changes in Git 2.9, and what they actually mean.
Git 2.9 brings support for cloning and updating submodules in parallel. In Git 2.8, it was already possible to use the
--recurse-submodule --jobs= switches with
git fetch command, and now, in Git 2.9, it's also possible with
git clone and
git submodule update commands. You can also set this as a default, by setting
submodule.fetchJobs in your Git configuration file.
Git 2.9 adds a new experimental heuristics for diff handling. The experimental heuristics allow you to see in some rare cases, sometimes the changes in the appropriate context if you have identical lines. The experimental heuristics can be enabled with
--compaction-heuristic switch or by setting
diff.compactionHeuristic in your Git configuration file.
By far, the more important improvement for
git diff is the ability to configure a diff-filter, that will do exactly what it says: filter your diffs before showing them. You can set diff filtering to use, for example, the diff-highlighting that is shipped with native Git using
git config interactive.diffFilter diff-highlight, or configure it in your Git configuration file.
In addition, the
git diff and
git log commands in Git 2.9 enable rename detection by default.
Interoperability between Git and Perforce has seen improvements in
git p4 command, which now allows mapping P4 author names to Git author names. Git merge, by default, now prevents merging branches that have no common base, which is a typically rare case that happens when migrating one code base to another. This can be still accomplished using
--allow-unrelated-histories. Git clone can now use
--shallow-submodules option which will do exactly what you would expect it to do.
Git 2.9 also comes with performance and other internal improvements. The most important is a major part of submodules functionality has been ported to C, and the repository set-up sequence has been streamlined, mainly by not looking into data that should not be there in the first place.
You can download the latest Git from the website or if you are interested in the fine-grained details, read the official release notes. Let us know your favourite updates in Git 2.9, in the comments below.