【问题标题】:How to get latest tag in github using git2go in Golang?如何在 Golang 中使用 git2go 在 github 中获取最新标签?
【发布时间】:2016-10-20 13:21:01
【问题描述】:

我正在尝试从我在 golang 的本地存储库中获取最新的 github 标签。 现在我得到了所有的标签,代码如下:

repo, err := git.OpenRepository("/home/defiant/Temp/repo")
    checkErr(err)
    re, err := repo.Tags.List()
    checkErr(err)
    fmt.Println(re)

返回的结果格式为:

[0.1 1.3 1.4]

这里 1.3 是最新的标签。那么有人可以帮我获取最新的标签吗?

【问题讨论】:

  • 为什么标签 1.3 比标签 1.4 更新?这似乎更像是一个问题 lmao
  • 我只是想知道标签的顺序是否符合创建时的顺序。
  • repo.Tags 的属性是否有日期或时间之类的?
  • 我不这么认为,我认为我们可以通过在git命令中使用logs选项来获取日期和时间。
  • 您需要获取标记提交及其日期。然后根据您提出的特定情况按日期排序。对于 semver 订购,请参阅github.com/Masterminds/semver。不确定 git2go 如何帮助您获得标签提交。

标签: git go tags


【解决方案1】:

您要查找的位是signature 对象(它有一个when 字段)。在提交时,您可能对authorcommitter 感兴趣。如果您自己使用 annotated 标签 - 它们有 tagger 字段,这是标记提交的时间。

如果您只有带注释的标签(即没有轻量级标签),这应该会为您提供标签的时间戳:

repo, err := git.OpenRepository("/home/defiant/Temp/repo")
if err != nil {
    panic(err)
}
err = repo.Tags.Foreach(func(name string, id *git.Oid) error {
    tag, err := repo.LookupTag(id)
    if err != nil {
        return err
    }
    log.Info(tag.Tagger().When)
    return nil
})

使用轻量级标签,您需要直接解析提交 - 您应该能够使用 LookupCommit 执行此操作,并明确选择 committerauthor

【讨论】:

    猜你喜欢
    • 2014-12-15
    • 2021-12-10
    • 1970-01-01
    • 2017-12-06
    • 2018-06-07
    • 1970-01-01
    • 2016-06-30
    • 2021-12-01
    • 2020-01-30
    相关资源
    最近更新 更多