Это в значительной степени то, что он делает, и это довольно быстрая операция. Обычная оль git log
проходит по всему дереву коммитов, так что работа - это данность. Чтобы выбрать только те коммиты, которые касаются файла, все, что ему нужно сделать, это прочитать каждый объект коммита, взять их дерево, прочитать это дерево и т. Д. До тех пор, пока он не достигнет рассматриваемого файла, и не получить SHA1 объекта BLOB , Затем он может просто проверить, совпадает ли SHA1 с предыдущим коммитом.
Конечно, не нужно проходить через все деревья, только те, которые необходимы для проверки этого блоба, а «поиск строки имени файла» немного вводит в заблуждение - данные дерева находятся в известный формат.
Так что, конечно, это займет немного больше времени, чем просто просмотр истории, но не тонна. Всего несколько дополнительных операций чтения за коммит, а не увеличение алгоритмической сложности.