git: change styling (whitespace) without changing ownership/blame?

In an ideal world there would be some way to rewrite history to look like the violations were never introduced

git filter-branch does precisely that.

http://git-scm.com/docs/git-filter-branch

This has the same issues as all history rewriting commands do, as it essentially invalidates all cloned repositories.


Building on Mario's answer, I would suggest git shame as a global git-alias:

git config --global alias.shame 'blame -w -M'

...and use it instead of git-blame:

git shame path/to/file

To explain:

  • -w Ignores whitespace changes, so not to blame someone who re-indented the code
  • -M Detects lines that were moved or copied, and blames the original author

EDIT:

Some argue that the -M is misleading, blaming the wrong person
(i.e.: don't blame me if someone rearranged what I wrote).
If you feel the same, please use the original suggestion: git slap


If you are trying to get a Root Cause issue using blame, don't forget use the -w flag to ignore all the white-spaces or indentation changes. So you'll get the last real change to the code, instead just an indentation, or removing trailing spaces.

git blame -w app/to/file.rb

or you can just use, git slap command..

git config alias.slap "blame -w";
git slap app/path/to/file.rb

having same results :D