Вы можете использовать команду svn blame для получения похожих результатов. Конечно, ревизии и страницы должны храниться в SVN. Если переход на svn является препятствием, возможно, может помочь изучение источников svn о том, как пишется команда «blame».
Редактировать: @ августа
Чтобы визуализировать это, мне нужно что-то, что не заботится о строках. Не так ли?
Ну, вам нужно обвинять в строках и diff для содержимого одного ряда. Первый выполняется VCS, второй вы можете сделать самостоятельно или сторонним кодом. По каждому хранилищу изменений в базе данных дельты обвинений рекомендуются (нужно сохранять только измененные строки). В примерах результатов для одной строки имеем:
Rev. num. Value
23 Hello worl
36 Hello cruel world
45 Hello wonderful world
Я полагаю, желаемый для вас результат (для ясности я пропустил пробелы)
Afer first diff:
(Hello)(23)(cruel)(36)(worl)(23)(d)(36)
После второго различия:
(Hello)(23)(wonderful)(45)(worl)(23)(d)(36)
Унифицированный diff не помогает в этом случае, поэтому иначе нужно сделать diff. Вы можете написать алгоритм для diff самостоятельно или найти подходящий код в инструментах слияния. Ниже приведен пример того, как TortiseMerge делает вещи.
Пытка слияния http://img169.imageshack.us/img169/7871/merge.png
Проблема не простая, но я думаю, что мои идеи могут вам немного помочь или дать какие-то подсказки.