git: Как найти историю файлов по идентификатору блоба
Я пытаюсь воспроизвести Subversion $Id: $
особенность с мерзавцем Я знаю, что я могу использовать .gitattributes
установить ident
атрибут, который позволит мне встроить идентификатор блоба в комментарий исходного кода. Это основное требование, и я покрыта.
Но я изо всех сил пытаюсь понять, как я могу сделать идентификацию полезной в практическом смысле. git log
а также git blame
требуется имя файла, поэтому я не могу использовать идентификатор с ними. git show
просто показывает содержимое BLOB-объекта, но не дает никакой ссылки на коммит.
То, что я хотел бы, учитывая идентификатор BLOB-объекта, получить коммит, который создал этот BLOB-объект. (В конечном итоге, чтобы получить git log
или же git blame
данные для файла, или чтобы иметь возможность проверить ревизию, которая содержала этот файл).
Я ценю, что история коммитов в распределенной системе, такой как git, сложнее, чем subversion, но если я смогу получить что-либо в качестве отправной точки, этого будет достаточно. Все, что мне действительно нужно, - это продемонстрировать, что с учетом исходного кода я могу отслеживать историю контроля версий.
2 ответа
А как насчет команды git tag? Проверьте эту ссылку как отправную точку:
В дополнение к идентификатору блоба в руководстве 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)