git: Как найти историю файлов по идентификатору блоба

Я пытаюсь воспроизвести Subversion $Id: $ особенность с мерзавцем Я знаю, что я могу использовать .gitattributes установить ident атрибут, который позволит мне встроить идентификатор блоба в комментарий исходного кода. Это основное требование, и я покрыта.

Но я изо всех сил пытаюсь понять, как я могу сделать идентификацию полезной в практическом смысле. git log а также git blame требуется имя файла, поэтому я не могу использовать идентификатор с ними. git show просто показывает содержимое BLOB-объекта, но не дает никакой ссылки на коммит.

То, что я хотел бы, учитывая идентификатор BLOB-объекта, получить коммит, который создал этот BLOB-объект. (В конечном итоге, чтобы получить git log или же git blame данные для файла, или чтобы иметь возможность проверить ревизию, которая содержала этот файл).

Я ценю, что история коммитов в распределенной системе, такой как git, сложнее, чем subversion, но если я смогу получить что-либо в качестве отправной точки, этого будет достаточно. Все, что мне действительно нужно, - это продемонстрировать, что с учетом исходного кода я могу отслеживать историю контроля версий.

2 ответа

А как насчет команды git tag? Проверьте эту ссылку как отправную точку:

https://git-scm.com/book/en/v2/Git-Basics-Tagging

В дополнение к идентификатору блоба в руководстве gitattributes описывается export-subst фильтр, чтобы вы могли включить это и использовать $Format:%H$ добавить хеш коммита или $Format:%d$ включить имена филиалов / тегов. Вы должны были бы выпустить файлы, используя git archive,

Например:

$ cat .gitattributes
* export-subst ident
$ cat foo.c
// Blob hash: $Id$
// Commit hash: $Format:%H%d$
$ git archive master | tar -xO
* export-subst ident
// Blob hash: $Id: 9e0569a55a4eaacdf8d100a2c3d3654cf767650b $
// Commit hash: 3802b7884faf182ce0994ac9d94925dad375be05 (HEAD -> master, tag: v2)
Другие вопросы по тегам