Use: diff-remap-data >map or git-remap-data >map will build information for remapper. remap-log is a filter. It takes map as argument and, in the simplest form, will look at the lines in stdin that have form :: If the indicated line from old tree had survived into the new one, we will get :: on the output. If it hadn't, we get O::: Lines that do not have such form are passed unchanged. Even that is already very useful for log comparison. E.g. if old-log is from the old tree and new-log is from the new one, we can do remap-log map remapped-log diff -u remapped-log new-log and have the noise due to line number changes excluded. Note that it's not just for build logs; the thing is useful for sparse logs, grep -n output, etc., etc. Behaviour described above is the default; what _really_ happens is that we take lines of form :: and replace them with :: or :: Defaults are :"", "" and "O:" resp.; what it gives us is the ability to do multiple remappings. IOW, we can say diff-remap-data old-tree newer-tree > map1 diff-remap-data newer-tree current-tree > map2 remap-log -o old: map1 foo and get lines that didn't make it into the newer tree marked with old: and otherwise be unchanged, ones that made it to newer, but not the current to be marked with newer: and have the filenames/line numbers remapped and ones that made it all the way be marked with current: and remapped all the way to current tree. That's quite useful when you want to carry logs for a while, basically using them as annotated TODO ("logs" here can very well be results of grep -n with annotations added to them). You can have all still relevant bits stay with the locations in text and see what had fallen out. Note on relation to git: only git-remap-data needs it. Aside of working on revisions in git repository instead of a couple of directory trees, it generates slightly better map than diff-remap-data does. I.e. it manages to remap more lines - it does notice renames.