Как получить последний тег в github с помощью git2go в Golang?

#git #go #tags

#мерзавец #Вперед #Теги #git

Вопрос:

Я пытаюсь получить последний тег github из моего локального репозитория в golang. На данный момент я получаю все теги, код приведен ниже:

 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. Почему тег 1.3 новее, чем тег 1.4? Это больше похоже на проблему, ржунимао

2. Я просто пытался узнать, соответствует ли порядок тегов тому порядку, в котором они были созданы.

3. существуют ли какие-либо свойства репозитория. Теги, которые содержат дату, время или что-то еще?

4. Я так не думаю, я думаю, мы можем получить даты и время, используя опцию logs в команде git.

5. вам нужно получить коммиты тега с их датами. Затем упорядочите по дате, для конкретного случая, который вы представили. Для упорядочения semver см. github.com/Masterminds/semver . Не уверен, как git2go может помочь вам получить коммиты тегов.

Ответ №1:

Бит, который вы ищете, — это signature объект (у него есть when поле). При фиксации вас может заинтересовать либо author , либо committer . Если вы используете сами 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 и явно выбрать committer или author the.