BT

Git 2.19 Improves Diff, Branch, Grep, and More

| by Sergio De Simone Follow 17 Followers on Sep 13, 2018. Estimated reading time: 2 minutes |

The latest release of Git brings a wealth of new features and internal changes, including improved diff, branch and grep, better command line completion, a new range-diff command, and more.

Git diff is now able to correctly mark as new the path of files added with intent-to-add. The intent-to-add bit can be used with the git add command, e.g., git add --intent-to-add <file>, to add an empty file to the working tree. This is mostly useful so git diff will show the full content of the new file in its output. Previously the file path in a diff was not marked as new.

On a related note, the apply command too has improved its handling of the intent-to-add option. It now adds new paths to the index when applying a patch that only affects the working tree for all new files added with intent-to-add.

Jumping back to the diff feature, the color-moved option has been extended to support a new color-moved-ws variant, which specifically makes git diff color lines that were moved and otherwise not changes except for white spaces. Something similar was achieves in Git 2.18 by using color-moved along with ignore-space-change, although the latter option would be applied to the whole output, not only to moves lines.

Git grep has also received two new options: column, which adds the column number of the first hit to the output; and only-matching, which restricts output to only the matching part of a regular expression, instead of the whole matching line.

Git 2.19 improves git branch list in two ways. First, git branch --list now reads its default sort options from the branch.sort configuration variable, similarly to git tag --list getting its sorting default from tag.sort. Additionally, the -l option to git branch, which was a shorthand to -create-reflog, has been deprecated to prevent developers using it inadvertently as --list alias.

Since version 2.6, Git provides a git fsck command to check the integrity of objects that are being pushed to a repository. This test can be performed on the receiving end and configured using the receive.fsck.* variables. For example, you could tell Git to reject a push if fsck fails due to zero-padded file modes defining the receive.fsck.zeroPaddedFilemode variable. Git 2.19 provide a counterpart to do the same for git fetch, using the fetch.fsck.* variables.

On the implementation side, the performance of git submodule foreach has been improved by rewriting it in C. Additionally, support for command line completion has been improved by reporting the list of configuration variables used by subcommands as well as including options prefixed with --no-. The git fetch command supports a new --negotiation-tip option to reduce the set of commits that are returned. This can improve bandwidth and performance when the local repository has a lot of refs that are not present in the remote history.

On the developer front, Git 2.19 has forbidden the use of strcat, which is deemed too dangerous, and will now cause a compilation failure.

There are many more new features in Git 2.19 than can be covered in this news item. If you are interested in the full detail, do not miss the official release notes.

Rate this Article

Adoption Stage
Style

Hello stranger!

You need to Register an InfoQ account or or login to post comments. But there's so much more behind being registered.

Get the most out of the InfoQ experience.

Tell us what you think

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread
Community comments

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Discuss

Login to InfoQ to interact with what matters most to you.


Recover your password...

Follow

Follow your favorite topics and editors

Quick overview of most important highlights in the industry and on the site.

Like

More signal, less noise

Build your own feed by choosing topics you want to read about and editors you want to hear from.

Notifications

Stay up-to-date

Set up your notifications and don't miss out on content that matters to you

BT