Git 2.8 has been released
The open source Git project has just released Git 2.8.0, featuring a variety of features, bugfixes, and other improvements from over 70 contributors. Here are some of the most useful…
The open source Git project has just released Git 2.8.0, featuring a variety of features, bugfixes, and other improvements from over 70 contributors. Here are some of the most useful new features:
Parallel fetches of submodules
Using “git submodules”, one Git repository can include other Git repositories as subdirectories1. This can be a useful way to include libraries or other external dependencies into your main project. The top-level repository specifies which submodules it wants to include, and which version of each submodule.
When you fetch into the top-level repository, you typically want to fetch into the submodule repositories as well:
git fetch --recurse-submodules
If you have a lot of submodules, all of these fetches can be time-consuming; git fetch
is essentially run in each submodule in turn. But now you can speed things up by fetching from multiple submodules in parallel. For example,
git fetch --recurse-submodules --jobs=4
runs four submodule fetches at the same time. This should be a real time saver! [source]
Don’t guess my identity!
If you use the same name and email address to commit to all of your Git projects, then you can configure those values once and for all in your global .gitconfig
file:
git config --global user.name 'Me Myself'
git config --global user.email me@example.com
But if, say, you want Git to use one email address for your open source projects and a different one for your work projects, you’ve undoubtedly made the mistake of committing to a new Git repository without having first set your email address in that repository. In this situation, Git emits a warning, but it creates the commit anyway, using an email address that it guesses from the local system hostname. If you’re trying to do something as complicated as different addresses for different projects, this is almost certainly not what you want.
Now you can tell Git not to guess, but rather to insist that you set user.name
and user.email
explicitly before it will let you commit:
git config --global user.useconfigonly true
Convergence with Git for Windows
There has recently been a big push to make Git feel as comfortable on Windows as it does on Linux and OS X. For example, it is relatively expensive to start processes on Windows, so many Git commands that were originally written as scripts have been rewritten in C to make them snappier.
In this release, a bunch of Windows-specific changes have been brought back from the Git for Windows project into the main Git project. This continuing effort will make it easier to keep the functionality of Git in sync across platforms as new features are added. [source, source, source, source]
Along the same lines, several Git commands that use text files as input have been made to accept both LF and CRLF line endings. That should reduce friction on Windows, where many tools may produce files with CRLF line endings. [source]
Security fixes
Git 2.8.0 includes the security fixes for CVE-2016-2324 that were first made available in Git 2.7.4. This vulnerability is not known to have any exploits in the wild, but could result in executing arbitrary code when cloning a malicious repository. We recommend that everybody upgrade to a version of Git with these fixes, namely 2.4.11+, 2.5.5+, 2.6.6+, 2.7.4+, or of course 2.8.0+.
In addition to these fixes, this release contains a number of cleanups designed to make it easier to avoid similar bugs in the future.
[source]
Brief mentions
- Git’s clean and smudge filters can now be turned off by setting them to the empty string. This feature is notable mainly because it is used by the new
git lfs clone
command, which can dramatically reduce the time to clone a repository that uses Git LFS. [source] -
Git configuration values are read from several different places, including system-level, user-level, and repository-specific files. This can make it hard to figure out where a setting has to be changed. Now you can use
git config --show-origin
to show where a particular setting came from:$ git config --show-origin user.name file:/home/me/.gitconfig Me Myself
-
You can use the new
git ls-files --eol FILENAME
to help diagnose end-of-line problems in a file:$ git ls-files --eol README.md screenshot.png i/lf w/lf attr/ README.md i/-text w/-text attr/ screenshot.png
The output shows (i) the EOL style auto-detected from the file’s contents in the index, (w) the EOL style detected from file’s contents in the working copy, and (attr) the style that is configured for the file via gitattributes. [source]
-
git ls-remote
can now also tell you a remote repository’s default branch:$ git ls-remote --symref origin HEAD ref: refs/heads/master HEAD db6696f653b917509dac1ac13b922e12773a84ff HEAD
- Support for cloning via the
rsync
protocol, which was superseded long ago by better alternatives, has been dropped. [source]
The rest of the iceberg
That’s just a sampling of the changes in Git 2.8.0. Check out the the full release notes for the complete list.
[1] Git submodules are analogous to Subversion’s svn:externals
.
Written by
Related posts
What the EU’s new software legislation means for developers
The EU Cyber Resilience Act will introduce new cybersecurity requirements for software released in the EU. Learn what it means for your open source projects and what GitHub is doing to ensure the law will be a net win for open source maintainers.
Game Off 2024 theme announcement
GitHub’s annual month-long game jam, where creativity knows no limits! Throughout November, dive into your favorite game engines, libraries, and programming languages to bring your wildest game ideas to life. Whether you’re a seasoned dev or just getting started, it’s all about having fun and making something awesome!
Highlights from Git 2.47
Git 2.47 is here, with features like incremental multi-pack indexes and more. Check out our coverage of some of the highlights here.