То, что вы можете искать, это revision walking
API.
- Описание функции можно найти здесь .
- A тест , демонстрирующий различные стратегии ходьбы, также может оказать вам некоторую помощь
Edit: A thread в списке рассылки libgit2 специально решает эту проблему.
Более точный ответ от Vicent Marti (сопровождающий libgit2):
... Просто вставьте каждую ГОЛОВКУ в ходунки. Ты не будешь
получить дубликаты коммитов.
Все, что вам нужно сделать, это вставить каждую ветку и теги oids в средство пересмотра, чтобы рекурсивно просмотреть историю коммитов. Обратите внимание, что это не приведет к получению висячих коммитов (коммитов или цепочек коммитов, на которые не ссылаются ни ветка, ни тег).
Редактировать 2: Это поведение (аналогично git log --all
) было успешно реализовано в libgit2sharp (привязки libgit2 .Net).
Редактировать 3: Недавно была объединена новая функция, которая позволит перечислять все объекты (коммиты, деревья, BLOB-объекты, ...), хранящиеся в базе данных объектов: git_odb_foreach()
.
Это больше соответствует сценарию git fsck
, о котором говорил @MatrixFrog.