Skip to content

Instantly share code, notes, and snippets.

@tekin
Last active February 23, 2024 16:46
Show Gist options
  • Star 110 You must be signed in to star a gist
  • Fork 6 You must be signed in to fork a gist
  • Save tekin/12500956bd56784728e490d8cef9cb81 to your computer and use it in GitHub Desktop.
Save tekin/12500956bd56784728e490d8cef9cb81 to your computer and use it in GitHub Desktop.
An example .gitattributes file that will configure custom hunk header patterns for some common languages and file formats. See https://tekin.co.uk/2020/10/better-git-diff-output-for-ruby-python-elixir-and-more for more details.
# Stick this in your home directory and point your Global Git config at it by running:
#
# $ git config --global core.attributesfile ~/.gitattributes
#
# See https://tekin.co.uk/2020/10/better-git-diff-output-for-ruby-python-elixir-and-more for more details
*.c diff=cpp
*.h diff=cpp
*.c++ diff=cpp
*.h++ diff=cpp
*.cpp diff=cpp
*.hpp diff=cpp
*.cc diff=cpp
*.hh diff=cpp
*.m diff=objc
*.mm diff=objc
*.cs diff=csharp
*.css diff=css
*.html diff=html
*.xhtml diff=html
*.ex diff=elixir
*.exs diff=elixir
*.go diff=golang
*.php diff=php
*.pl diff=perl
*.py diff=python
*.md diff=markdown
*.rb diff=ruby
*.rake diff=ruby
*.rs diff=rust
*.lisp diff=lisp
*.el diff=lisp
# Additional manually-configured matchers you may want to add to your .gitconfig
[diff "rspec"]
xfuncname = "^[ \t]*((RSpec|describe|context|it|before|after|around|feature|scenario|background)[ \t].*)$"
[diff "swift"]
xfuncname = ^[ \t]*((class|func)[ \t].*)$
@citizen428
Copy link

citizen428 commented Oct 20, 2020

@Rafi993 There aren't any defined regex for ERb in the git source, so it's either HTML or nothing.

@Rafi993
Copy link

Rafi993 commented Oct 20, 2020

Thank you @citizen428

Edit:
I think you mentioned some other user by accident :)

@triwats
Copy link

triwats commented Oct 20, 2020

This is great, thanks a lot! Super useful if you're using a less rich editor such as Vim and working mainly out of a terminal.

@jimryan
Copy link

jimryan commented Oct 22, 2020

Thank you so much for this! I work with rspec and capybara a lot and found using the built-in ruby diff for spec files broke the hunk header entirely for them, so I wrote my own regex for specs based on the native ruby regex:

# .gitconfig

[diff "rspec"]
        xfuncname = "^[ \t]*((RSpec|describe|context|it|before|after|around|feature|scenario|background)[ \t].*)$"

You can then use "rspec" as a diff driver:

# .gitattributes

*.rb       diff=ruby
*_spec.rb  diff=rspec

@tekin
Copy link
Author

tekin commented Oct 22, 2020

@jimryan that’s super cool, thanks for sharing!

@zubin
Copy link

zubin commented Oct 22, 2020

@jimryan Might want to add around too. Thanks!

@jimryan
Copy link

jimryan commented Oct 22, 2020

@zubin Good point! I've updated the snippet above. Thanks!

Copy link

ghost commented Oct 30, 2020

Thank you for a great tip.
I found this gist as well and comment here for additional info.

https://gist.github.com/ruediger/5647207

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment