Как получить все идентификаторы объектов? - PullRequest
7 голосов
/ 09 марта 2011

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

1 Ответ

7 голосов
/ 25 марта 2011

То, что вы можете искать, это 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.

...