threads / discuss / 61032

Accuracy of "git blame -C" - are there configuration options?

Subject: Accuracy of "git blame -C" - are there configuration options?

## tl;dr

2 messages between Mar 1, 2024 and Mar 8, 2024.

replies: 1people: 1as markdown or json

Baumann, Moritz· Mar 1, 2024, 07:21 UTC · lore
Hi,

A colleague recently experimented with "git blame -C" and noticed that the accuracy with which git detects lines moved from other files varies a lot depending on the sizes of the files involved.

Example repository: https://github.com/Boddlnagg/git-blame-problem

The latest commit on all branches moves some lines from Decl.cpp to line 93 of DeclBase.cpp. "git blame -C" doesn't detect this on main, but on the "works-as-expected" branch, in which the size of Decl.cpp was artificially reduced, it does.

Further experiments show that the following work as well: git blame -L 93,95 -C main -- DeclBase.cpp git blame -L 80,108 -C main -- DeclBase.cpp

However, with a sufficiently large range, it stops working again: git blame -L 80,109 -C main -- DeclBase.cpp

How does the pickaxe search of git blame work under the hood? Are there any configuration options I can use if I want to trade performance for accuracy?

Best regards, Moritz Baumann

Baumann, Moritz· Mar 8, 2024, 13:59 UTC · re: Baumann, Moritz · lore

Re: Accuracy of "git blame -C" - are there configuration options?

Maybe I should rephrase the question to clarify what I want to achieve:

Is there a way to execute 'git blame -C' for an entire large file at once and get the same accurate results as if 'git blame -C -L' had been called for each line separately?

---
 
Hi,

A colleague recently experimented with "git blame -C" and noticed that the accuracy with which git detects lines moved from other files varies a lot depending on the sizes of the files involved.

Example repository: https://github.com/Boddlnagg/git-blame-problem

The latest commit on all branches moves some lines from Decl.cpp to line 93 of DeclBase.cpp. "git blame -C" doesn't detect this on main, but on the "works-as-expected" branch, in which the size of Decl.cpp was artificially reduced, it does.

Further experiments show that the following work as well: git blame -L 93,95 -C main -- DeclBase.cpp git blame -L 80,108 -C main -- DeclBase.cpp

However, with a sufficiently large range, it stops working again: git blame -L 80,109 -C main -- DeclBase.cpp

How does the pickaxe search of git blame work under the hood? Are there any configuration options I can use if I want to trade performance for accuracy?

Best regards, Moritz Baumann

← back to recent threads