I recently learned about git blame and what it does. I want to know how git finds when each line was changed in a file, even across file renames. In other words, I want to know how the blame algorithm works.
How does git create a file blame?
380 Views Asked by Rak Laptudirm At
1
There are 1 best solutions below
Related Questions in GIT
- problem to push files on a repository git
- diff3 output in git conflict style, including mergeable hunks
- Git Not In Sync with Local Branch
- Setting up the version control of .dotfiles while the .config is connected to a forked repo
- How to fix overriding the main branch in Git?
- I can't add text to "Message" in VS Code when committing to Git
- How can i redirect pull request from main branch to another branch
- Xcode commits (possibly outside of any branch) disappeared, how to get them back?
- Git/TortoiseGit : how to apply ONLY the changes from ONE commit from branch A, to branch B?
- How can I reintroduce username an password on git using fedora?
- GIT SKIP EMPTY DIRECTORIES
- Git smudge run once per checkout or per commit?
- I can't find ~/.profile or ~/.bashrc in C:/Users/<user>/.ssh folder
- Set environment variable during push for GitHub Actions
- Android WebRTC compile
Related Questions in BLAME
- Git blame command to view the latest tag for each line
- How to `git blame --ignore-revs-file` on a bare git repository
- GIT Overwrite author of code lines (git blame)
- What does an asterisk mean in git blame for IntelliJ IDEA?
- How does git create a file blame?
- git blame for a file which has been renamed many times
- How to run "git blame" on a given set of files using Octokit
- JGit BlameCommand keeps returning null
- How to get cell edit history by Google App Script?
- In git merge/rebase how not to loose authors for git blame
- Git commit without a new author (keep old lines' authors)
- How do I to identify forced pushes in Git?
- How to get information on who deleted an s3 resource
- How to get all commit hashes from a merge? Merged commits aligned by timestamp
- How to delete GitHub blame history?
Related Questions in GIT-BLAME
- How do I make git blame’s default coloring consistent with my terminal’s colorscheme?
- When doing a shallow git clone, how to limit git blame to the depth of the clone?
- How to enable git blame on every file in project in intelliJ
- VS Code: Find occurrences of text only in changes made by me
- Git blame command to view the latest tag for each line
- What are the performance characteristics of git blame ignore-revs?
- git - how can I _copy_ a file and still be able to use the original history when blaming?
- Git commit without changing author
- How to `git blame --ignore-revs-file` on a bare git repository
- git automatically ignore commits by file
- Getting full blame history all at once for a given file
- How to get `git grep` to show `git blame`-like information
- Getting all lines by author per file in git
- How can I show annotations in PhpStorm/WebStorm search preview
- To display changes to the first line of a csv file tracked by git, can git log be on one line when using the -L line argument?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
First of all, the
blamefeature exists in almost all others SCM too, including CVS. So the algorithm used will vary according to the tool you're using.Basically, however, the simplest way to achieve this is starting from the most recent state of your file, then browsing history backwards (toward the past) and applying the negative of each changeset.
Every affected row is marked as belonging to last commit, all other rows to previous one. Aside of this, you'll count the number of these latter rows. Then you restart this process with commit n-1 and n-2. If the rows don't explicitly belong to "n-1", they are ignored because this means they've been altered by some more recent commit (actually, the reverse changeset will still be applied, but commit number won't be updated). Otherwise, you apply the same computations, updating the commit number each row belongs to.
You then just have to iterate on this all the way down 'til initial commit if needed but if you reached a state where the "number of rows" quoted above reaches zero, you know you can stop here because it means that all the rows have been altered since the original state of the file and there's no more need to go any further.