Я пытаюсь получить список всех идентификаторов объектов в репозитории git, используя libgit2. Кажется, я не могу найти никакого метода для этого. Есть ли в libgit2 метод для получения всех идентификаторов объектов (или их повторения) или мне нужно читать их вручную?
Как получить все идентификаторы объектов?
Ответы (1)
Возможно, вам нужен revision walking
API.
- Описание функции можно найти здесь< /а>.
- тест, демонстрирующий различные стратегии ходьбы, может также предоставить вам некоторую помощь
Изменить: A тред в списке рассылки libgit2, в частности занимается этим.
Более точный ответ от Vicent Marti (сопровождающий libgit2):
... Просто вставьте каждую ГОЛОВУ в ходунки. Вы не получите повторяющихся коммитов.
Все, что вам нужно сделать, это отправить каждую ветку и пометить oids в обходчик ревизий, чтобы рекурсивно просмотреть историю коммитов. Обратите внимание, что это не приведет к извлечению оборванных коммитов (коммитов или цепочки коммитов, на которые не ссылается ни ветка, ни тег).
Изменить 2: это поведение (похожее на git log --all
) было успешно реализован в libgit2sharp (привязки libgit2 .Net).
Изменить 3: недавно была объединена новая функция, позволяющая перечислять все объекты (коммиты, деревья, большие двоичные объекты, ...), хранящиеся в базе данных объектов: git_odb_foreach()
.
Это больше соответствовало бы сценарию git fsck
, о котором говорил @MatrixFrog.
git_odb_foreach()
документация сильный>- Простой тест< /strong> демонстрация использования API
git fsck
, поэтому я бы посоветовал просмотреть исходный код libgit2, чтобы увидеть, есть ли код, который делает то, что делаетgit fsck
. - person MatrixFrog   schedule 10.03.2011