2015-07-24 3 views
0

Учитывая объект blob, как вы можете найти (первый) commit, который содержит этот объект?Найти коммиты, которые содержат заданный объект blob в git2go (libgit2)

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

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

+0

Это может быть дубликат http://stackoverflow.com/questions/223678/which-commit-has-this-blob – joran

+0

Довольно много да, но решение использует git cli not libgit или git2go, и это в основном та же идея как написано в этом вопросе. – Calin

ответ

0

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

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

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