Я думаю, вы используете практически любую SCM для своей задачи. Большинство VCS («Система контроля версий», обратите внимание: ничего не сказано об исходном коде) имеют «вину» или эквивалентную команду для обнаружения истории на основе строки. String-order важен для большинства обычных ситуаций в разработке, поэтому - вы не можете отключить отслеживание этих изменений кода, но вы можете использовать dif-merger, который обнаруживает показ таких изменений (снаружи использовал SCM) - я знаю об этой функции в CompareIT, например
Для меня достаточно хорошим VCS для вашей задачи кажется Git (с его помощью grep, git-blame, annotate) и Mercurial (с revsets, blame, grep)