GIT: определить ревизию на основе файла - PullRequest
9 голосов
/ 12 сентября 2011

У меня есть файл из проекта, который использует GIT в качестве хранилища. Для этого файла мне нужно выяснить, к какой ревизии принадлежит этот файл. Файл является автономным за пределами хранилища (не отслеживается), поэтому стандартные команды git не работают.

Есть ли способ определить версию, к которой принадлежит этот файл, только на основе его имени и содержимого?

1 Ответ

16 голосов
/ 12 сентября 2011

Я не думаю, что для этого есть команда с одним выстрелом - объектная модель git делает довольно трудоемким возврат из блоба к коммитам, которые могут ссылаться на него.Вот один из способов сделать это.Прежде всего, найдите хеш файла, который будет использовать git, с:

git hash-object foo.c

Предположим, что возвращает f414f31.Затем вы можете использовать скрипт, подобный следующему:

for c in $(git rev-list --all)
do
   ( git ls-tree -r $c | grep f414f31 ) && echo Found the blob in commit: $c
done

..., чтобы показать все коммиты, которые содержат этот BLOB-объект.Если вы хотите узнать, в каких ветвях находятся эти коммиты, вы можете сделать:

git branch -a --contains 1a2b3c4d
...