如何在GO中使用libgit2运行git log命令?

3

我对从go运行git log命令很感兴趣。我看到C#版本支持此功能(https://github.com/libgit2/libgit2sharp/wiki/git-log)。GO版本是否也支持类似的git log命令?我快速搜索了“query”和“filter”关键字,但没有找到任何内容。

2个回答

3

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
})

1
你至少可以使用Commit.Parent方法来模拟git日志,该方法允许访问提交的父级(来自commit.go)。除此之外,我没有看到直接调用git日志的方式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接