Найти коммиты, которые содержат указанный объект BLOB в git2go (libgit2)
Учитывая объект BLOB-объекта, как вы можете найти (первый) коммит, который содержит этот объект?
Я думаю, что одно из решений - это запустить revwalk с вершины ветви и пройтись по графику, осматривая дерево для каждого коммита и использовать что-то вроде git_tree_entry_byid
чтобы увидеть, содержит ли он ваш объект. Это позволит найти коммиты, доступные из определенной ветки, но в моем случае это решение.
Есть ли лучший способ сделать это?
1 ответ
Если вы хотите проверить, содержится ли объект в определенном коммите, единственный способ сделать это - пройтись по графу объектов и посмотреть, есть ли он там.
Однако есть один способ, которым вы можете повторно использовать некоторые из этих поисков. Если вы разыграете пару коммитов, и вы знаете, что рассматриваемый объект содержится (или нет) в одном из них, вы можете посмотреть на различие для появления / исчезновения этого сгустка из дерева коммитов, что позволит избежать перехода вниз равных деревьев.
git поддерживает битовые карты достижимости, что делает это довольно быстрым, но libgit2 не поддерживает их чтение.