Найти коммиты, которые содержат указанный объект BLOB в git2go (libgit2)

Учитывая объект BLOB-объекта, как вы можете найти (первый) коммит, который содержит этот объект?

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

Есть ли лучший способ сделать это?

1 ответ

Если вы хотите проверить, содержится ли объект в определенном коммите, единственный способ сделать это - пройтись по графу объектов и посмотреть, есть ли он там.

Однако есть один способ, которым вы можете повторно использовать некоторые из этих поисков. Если вы разыграете пару коммитов, и вы знаете, что рассматриваемый объект содержится (или нет) в одном из них, вы можете посмотреть на различие для появления / исчезновения этого сгустка из дерева коммитов, что позволит избежать перехода вниз равных деревьев.

git поддерживает битовые карты достижимости, что делает это довольно быстрым, но libgit2 не поддерживает их чтение.

Другие вопросы по тегам