Вы можете запустить git cat-file blob COMMIT:RELATIVE-PATH
. Это должно работать для любой ревизии COMMIT
, которая указывает на фиксацию, при условии, что вы указали действительное относительное имя файла в этой ревизии .
Если файл не существует в этой ревизии, вы получите что-то вроде следующего:
fatal: Not a valid object name HEAD:not-here
Обратите внимание, что здесь нет возможности рассматривать переименования; это спецификация ревизии (см. gitrevisions(7)
), которая разрешается непосредственно в имя BLOB-объекта.
Если вы хотите следить за переименованием файла, вам придется выполнять гораздо больше работы со сценариями. Вы можете найти имя файла, в который был переименован файл, выполнив что-то вроде следующего:
git log -M --follow --diff-filter=R --format=tformat:%H -- RELATIVE-PATH | \
head -n1 | \
xargs git diff-tree -M --diff-filter=R --raw -z
Это покажет все файлы, которые были переименованы в этом коммите; проанализируйте имя, которое вы хотите, и продолжайте с новым git log
вызовом, ревизией и путем к файлу в случае, если файл был переименован снова.
В целом, эта последняя часть может быть более производительной, если использовать обертку для обходчика версий libgit2.