Как запустить команды git log, используя libgit2 в GO?

Я заинтересован в запуске команд git log от go. Я вижу, что версия C# имеет поддержку для этого ( https://github.com/libgit2/libgit2sharp/wiki/git-log). Поддерживает ли версия GO аналогичные команды git log? Я быстро выполнил поиск по ключевым словам "запрос" и "фильтр" и ничего не нашел.

2 ответа

Решение

RevWalk - это то, что вы ищете.

repo, err := git.OpenRepository("path/to/repository")
log.Println(err)

w, err := repo.Walk() // returns a RevWalk instance for this repo
log.Println(err)

Вы можете настроить возвращенный RewWalk пример.

err = w.PushHead() // instruct to start from the head commit
log.Println(err)

Если вы хотите войти в другую ветку, вы можете использовать PushRef. Существуют и другие параметры конфигурации для настройки начальной и конечной точек журнала. Проверьте документацию для тех.

Используйте метод Iterate, чтобы просмотреть список коммитов. Вам нужно передать ему функцию, которая будет вызываться для каждого коммита в списке.

w.Iterate(func(c *git.Commit) bool {
    fmt.Println(c.Message())
    return true  // return false when you want to stop iterating
})

Вы могли бы по крайней мере эмулировать журнал git, используя Commit.Parent метод, который позволяет получить доступ к родителю коммита (из commit.go).

Кроме того, я не видел прямого звонка в git log.

Другие вопросы по тегам