Ein Blog

Hatten es gerade im Team, ging um Formatierungs-Commits.

Da gibt es ja 2 Ansätze, die man gehen kann:

  1. Einen pre-commit-hook, der die Dateien formatiert, die ein Commit sowieso anpasst.
  2. Einzelne Formatierungs-Commits, die mehrere Dateien anfassen

Bei 1. is der Vorteil, dass man wenige bis gar keine Konflikte bekommt, wenn andere noch in anderne Branches arbeiten. Der Nachteil ist, dass man Änderungen in einem Commit hat, die nicht zu der Fachlichkeit gehören, die man in dem Commit gerade tätigt. Beides ist mehr oder weniger gut/schlimm.

Der 2. Ansatz ist genau umgekehrt: Er hat keine Vermischung mit fachlichen Änderungen, aber ein hohes Potential für Konflikte.

Beide haben aber ein Problem: Sie machen ggf. git blame für die formatierten Zeilen kaputt. Zumindest für Ansatz 2 gibt es da einen Fix: .git-blame-ignore-revs. Die Datei beinhaltet Commit-Hashes von Commits, die bei git blame ignroriert werden sollen. So sind eine “Format”-Commits nicht mehr so schlimm.

GitHub respektiert die Datei auch bei der Blame-View, solange sie diesen Namen hat. Damit das lokale Git das auch respektiert, muss man es konfigurieren:

# repo
git config blame.ignoreRevsFile .git-blame-ignore-revs
# global
git config --global blame.ignoreRevsFile .git-blame-ignore-revs

Alternativ kann man auch einen Dateinamen bei Blame übergeben:

git blame --ignore-revs-file .git-blame-ignore-revs foo.py

Oder einen einzelnen Commit ignorieren:

 blame --ignore-rev d34db33f

Hier ist noch ein Blogpost dazu.