diff-so-fancy README

The project's README from github.com/so-fancy/diff-so-fancy. As one markdown file: README.md.

🎩 diff-so-fancy Circle CI build AppVeyor build

diff-so-fancy makes your diffs human-readable instead of machine-readable. This helps improve code quality and helps you spot defects faster.

🖼️ Screenshot

Vanilla git diff vs git and diff-so-fancy

diff-highlight vs diff-so-fancy

📦 Install

Simply copy the diff-so-fancy script from the latest Github release into your $PATH and you're done. Alternately to test development features you can clone this repo and then put the diff-so-fancy script (symlink will work) into your $PATH. The lib/ directory will need to be kept relative to the core script.

diff-so-fancy is also available from the NPM registry, brew, Fedora, in the Arch extra repo, and as ppa:aos for Debian/Ubuntu Linux.

Issues relating to packaging ("installation does not work", "version is out of date", etc.) should be directed to those packages' repositories/issue trackers where applicable.

✨ Usage

Git

Configure git to use diff-so-fancy for all diff output:

git config --global core.pager "diff-so-fancy | less --tabs=4 -RF"
git config --global interactive.diffFilter "diff-so-fancy --patch"

Diff

Use -u with diff for unified output, and pipe the output to diff-so-fancy:

diff -u file_a file_b | diff-so-fancy

We also support recursive mode with -r or --recursive

diff --recursive -u /path/folder_a /path/folder_b | diff-so-fancy

⚒️ Options

markEmptyLines

Colorize the first block of an empty line. (Default: true)

git config --bool --global diff-so-fancy.markEmptyLines false

changeHunkIndicators

Simplify Git header chunks to a human readable format. (Default: true)

git config --bool --global diff-so-fancy.changeHunkIndicators false

stripLeadingSymbols

Remove the + or - symbols at start of each diff line. (Default: true)

git config --bool --global diff-so-fancy.stripLeadingSymbols false

useUnicodeRuler

Use Unicode to draw the ruler lines. Setting this to false will use ASCII instead. (Default: true)

git config --bool --global diff-so-fancy.useUnicodeRuler false

rulerWidth

rulerWidth sets the width of the ruler lines. (Default: screen width)

git config --global diff-so-fancy.rulerWidth 80

shortHeaders

Simplify the header information to a single line for filename and line number. (Default false)

git config --global diff-so-fancy.shortHeaders true

semIntegration

Include the summary from sem in the header for each changed file. (Default false)

git config --global diff-so-fancy.semIntegration true

👨 The diff-so-fancy team

Person Role
@scottchiefbaker Project lead
@OJFord Bug triage
@GenieTim Travis OSX fixes
@AOS Debian packager
@Stevemao/@Paul Irish NPM release team

🧬 Contributing

Pull requests are quite welcome, and should target the next branch. We are also looking for any feedback or ideas on how to make diff-so-fancy even fancier.

Other documentation

🔃 Alternatives

🏛️ License

MIT

diff-so-fancy (so-fancy/diff-so-fancy)

Searching Database…

What is this?A command-line tool that turns git's machine-readable diff output into human-readable text, so you can review changes and spot defects faster.
Is this a library I add to my project, or a tool I install?A standalone tool. You install one script, then either configure git to run it on every diff or pipe any diff output through it from the terminal.
How do I install it and hook it into git?Copy the diff-so-fancy script from the latest GitHub release into your $PATH, or grab a package: it's on npm, Homebrew, Fedora, in the Arch extra repo, and as ppa:aos for Debian/Ubuntu. Then configure git to use it for all diff output.
Does it need anything besides git to run?It's written in Perl, so you need a Perl runtime on your machine, plus git for the usual diff workflow.
Any install pitfalls?If you clone the repo for development instead of using a release, the lib/ directory must stay next to the main script. Problems with npm or distro packages should be reported to those packages' own issue trackers, not this repo.
Will it run on Windows, or is it a Mac and Linux thing?It's a portable script that runs wherever Perl and git do: the README lists brew for macOS, Fedora, Arch and a Debian/Ubuntu PPA, and the npm package works cross-platform, Windows included.
What does it actually change about how a diff looks?Git's chunk headers become a simplified, human-readable format, the first block of empty lines gets colorized, and the + and - symbols at the start of lines can be removed. Headers can shrink to a single line with just the filename and line number, and it draws a Unicode ruler sized to your screen. All of these are options — markEmptyLines, changeHunkIndicators, stripLeadingSymbols, useUnicodeRuler, rulerWidth, shortHeaders, semIntegration — each with sensible defaults.
Can I use it outside git, with plain diff output?Yes — run diff with -u for unified output and pipe it into diff-so-fancy. Recursive mode is supported too, via -r or --recursive.
How is it different from Delta or difftastic?The README lists Delta, difftastic and Lazygit as alternatives. Lazygit even ships with diff-so-fancy integration, so you can get the same readable output inside that terminal UI instead of choosing between them.
Creator
so-fancy
Size
0.8 MB
Stars
18.1K
Age
10y
Commits · 90 Days