so-fancy / diff-so-fancy
- среда, 15 июня 2016 г. в 03:15:53
Perl
Good-lookin' diffs. Actually… nah… The best-lookin' diffs. 🎉
diff-so-fancy builds on the good-lookin' output of git contrib's diff-highlight to upgrade your diffs' appearances.
+ or - at line-start, making for easier copy-paste.git diff vs git diff --color | diff-so-fancy
You can do one-off fanciness:
git diff --color | diff-so-fancyBut, you'll probably want to fancify all your diffs. Run this so git diff will use it:
git config --global core.pager "diff-so-fancy | less --tabs=4 -RFX"However, if you'd prefer to do the fanciness on-demand with git dsf, drop an alias in your ~/.gitconfig:
dsf = "!f() { [ \"$GIT_PREFIX\" != \"\" ] && cd "$GIT_PREFIX"; git diff --color $@ | diff-so-fancy | less --tabs=4 -RFX; }; f"For convenience, the recommended installation is via NPM. If you'd prefer, you may choose to do a manual installation instead.
npm install -g diff-so-fancyThis will install and link the diff-so-fancy and diff-highlight scripts. You can also upgrade to the latest version with this command.
On Mac, you can install via Homebrew:
brew update
brew install diff-so-fancydiff-highlight has default colors that are arguably a little nasty. They'll work fine, but you can try some fancier colors:
git config --global color.diff-highlight.oldNormal "red bold"
git config --global color.diff-highlight.oldHighlight "red bold 52"
git config --global color.diff-highlight.newNormal "green bold"
git config --global color.diff-highlight.newHighlight "green bold 22"You may also want to configure general diff colors.
If you want, you can choose to install manually:
diff-highlight and diff-so-fancy) via either downloading or cloning the repo.diff-highlight from the official git repo, give it a chmod +x.PATH directly or with symlinks.lib/diff-so-fancy.pl in the same directory as diff-so-fancy. You will end up something like this:
~/bin/diff-highlight~/bin/diff-so-fancy~/bin/lib/diff-so-fancy.plcore.pager config, as described above.Note: The diff-highlight dependency is an official git-contrib script, duplicated here for convenience. If you prefer less fancy in your diff, you also use diff-highlight on it's own.
Should the first block of an empty line be colored.
Simplify git header chunks to a more human readable format.
Should the pesky + or - at line-start be removed.
By default all the configs are true. You can turn any off by running:
git config --bool --global diff-so-fancy.markEmptyLines false
git config --bool --global diff-so-fancy.changeHunkIndicators false
git config --bool --global diff-so-fancy.stripLeadingSymbols false
To reset them to default (true):
git config --unset --global diff-so-fancy.markEmptyLines
git config --unset --global diff-so-fancy.changeHunkIndicators
git config --unset --global diff-so-fancy.stripLeadingSymbols
Sometimes you will want to bypass diff-so-fancy. Use --no-pager for that:
git --no-pager diffYou can pre-seed your less pager with a search pattern, so you can move between files with n/p keys. Add --pattern='^(added|deleted|modified): ' to the end of the less flags for your git pager config.
diff-so-fancy started as a commit in paulirish's dotfiles, which grew into a standalone script. Later, @stevemao brought it into its own repo (here), and gave it the room to mature. It's quickly grown into a widely collaborative project.
Pull requests quite welcome, along with any feedback or ideas.
If you find a bug using the following command
git diff HEAD..HEAD^You can use report-bug.sh we provide
./report-bug.sh 'git diff HEAD..HEAD^'
# or
curl https://raw.githubusercontent.com/so-fancy/diff-so-fancy/master/report-bug.sh | bash -s 'git diff HEAD..HEAD^' 'diff.txt'Grab the output file and attach to the GitHub issue you create. A base64 version is also copied to your clipboard so you can paste to the issue.
# fork and clone the diff-so-fancy repo.
git clone https://github.com/so-fancy/diff-so-fancy/ && cd diff-so-fancy
# test a saved diff against your local version
cat test/fixtures/ls-function.diff | ./diff-so-fancy
# setup symlinks to use local copy
npm link
cd ~/projects/catfabulator && git diffYou'll need to install bats, the Bash automated testing system. It's also available as brew install bats
git submodule sync
git submodule update --init # pull in the assertion library, bats-assert
# Run the test suite once:
bats test
# Run it on every change with `entr`
brew install entr
ls --color=never diff-so-fancy test/*.bats | entr bats testWhen writing assertions, you'll likely want to compare to expected output. To grab that reliably, you can use something like git --no-pager diff | diff-so-fancy > output.txt
You can lint your scripts via shellcheck, our CI bots will also check.
brew install shellcheck
shellcheck diff-so-fancy update-deps.shMIT