Marcus Comstedt (ACROSS) (Hail Ilpalazzo!) @ Pike (-) developers forum wrote:
git blame -C -C README-CVS
will allow git to traverse back through copy-modify-commit history.
Ok. It seems that I was right about the performance problem with git blame though. "git blame -C -C" on this file takes 34 seconds. "svn blame" and "cvs annotate" both give the desired result in about 1 second.
True (in this case).
To address the problem in a more generic fashion: - SVN can make note of special copy/rename/move operations in its repository; if you don't use those, SVN is not able to supply the required information at all. - Git, in a sense, has similar special copy/rename/move operations in its repository; they take the form of needing a commit with the unmodified copied/moved/renamed file, at least one commit *prior* to the commit which modifies the file. If you do so, git's performance is higher than SVN's when using blame or annotate. The nice thing is that even if you forget to tell git the file has moved (i.e. you modify the copied/moved/renamed file before committing), it still has a way of connecting history (at the cost of more CPU-cycles).
This means that, in order to keep up performance for blame, I'd need to verify there is an unmodified commit before the actual modifications; this can be easily verified and retrofitted into the git repository (in many cases it already is).