GIT: определить версию на основе файла

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

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


person Robert    schedule 12.09.2011    source источник
comment
я не понимаю вашего вопроса. Ваш файл отслеживается или не отслеживается?   -  person Kit Ho    schedule 12.09.2011
comment
Вне репозитория означает не отслеживается.   -  person Robert    schedule 12.09.2011
comment
@Robert Для меня за пределами репозитория это означает, что он никогда не отслеживался, что означало бы, что его версии нет, что делает ваш вопрос недействительным. Я думаю, что формулировка, которую вы ищете, заключается в том, что файл был отслежен в какой-то момент времени.   -  person Andy    schedule 12.09.2011


Ответы (1)


Я не думаю, что для этого есть одноразовая команда - объектная модель 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

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

git branch -a --contains 1a2b3c4d
person Mark Longair    schedule 12.09.2011