#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.