Quick tip on Git diffs for PHP files

Every time a PHP developer runs git diff on the command line a kitten dies:

Hell no! This piece of code is inside a method, not the class :(

Those @@ snippets are called Hunk Headers — because every part of a diff is called a hunk, duh. Unfortunately, git is too stupid to figure out PHP files should be diff’d according PHP syntax, so you need to give it a hand by using a rule on git attributes.

Unfortunately[2], git attributes are not that easy to configure user-wide as config options are (no git global commands), thus here’s the tip:

  1. create the folder if it doesn’t exist: ~/.config/git (or whatever is in $XDG_CONFIG_HOME)
  2. write in ~/.config/git/attributes this: *.php diff=php
  3. Save and diff away
This can also be configured per project by adding the same text inside a .gitattributes file.
There you have it! A decent Hunk Title on PHP files

It’s quite weird why Git doesn’t understand out of the box that given the file extension, as there are pre-baked settings to understand several syntaxes (such as TeX, Fortran, HTML, etc). Go figure…