Как получить все идентификаторы объектов?

Я пытаюсь получить список всех идентификаторов объектов в репозитории git, используя libgit2. Кажется, я не могу найти никакого метода для этого. Есть ли в libgit2 метод для получения всех идентификаторов объектов (или их повторения) или мне нужно читать их вручную?


person Community    schedule 09.03.2011    source источник
comment
Я вообще не знаю libgit2, но я думаю, что команда git для этого будет каким-то вариантом git fsck, поэтому я бы посоветовал просмотреть исходный код libgit2, чтобы увидеть, есть ли код, который делает то, что делает git fsck.   -  person MatrixFrog    schedule 10.03.2011


Ответы (1)


Возможно, вам нужен revision walking API.

  • Описание функции можно найти здесь< /а>.
  • тест, демонстрирующий различные стратегии ходьбы, может также предоставить вам некоторую помощь

Изменить: A тред в списке рассылки libgit2, в частности занимается этим.

Более точный ответ от Vicent Marti (сопровождающий libgit2):

... Просто вставьте каждую ГОЛОВУ в ходунки. Вы не получите повторяющихся коммитов.

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

Изменить 2: это поведение (похожее на git log --all) было успешно реализован в libgit2sharp (привязки libgit2 .Net).

Изменить 3: недавно была объединена новая функция, позволяющая перечислять все объекты (коммиты, деревья, большие двоичные объекты, ...), хранящиеся в базе данных объектов: git_odb_foreach() .

Это больше соответствовало бы сценарию git fsck, о котором говорил @MatrixFrog.

person nulltoken    schedule 25.03.2011
comment
Первые две ссылки в вашем ответе возвращают 404. - person Nathan Osman; 14.03.2013
comment
@GeorgeEdison Спасибо! Сейчас они исправлены. - person nulltoken; 15.03.2013