开发者

golang的Pseudo-versions使用问题解析

目录
  • Pseudo-versions
    • 定义
    • 格式
    • forms
    • +incompatible
  • 问题
    • 小结

      本文主要研究一下golang的Pseudo-versions

      Pseudo-versions

      定义

      Pseudo-versions,中文大概是伪版本的意思,就是没有打语义版本tag(semantic 编程version tags)的会使用伪版本

      格式

      类似v0.0.0-yyyymmddhhmmss-abcdefabcdef,中间的时间为UTC时间(东八区为utc+8),最后的12位为git commit的hash的前12位

      forms

      vX.0.0-yyyymmddhhmmss-abcdefabcdef

      如果之前都没有major的语义版本tag则其Pseudo version第一部分为vX.0.0

      vX.Y.Z-pre.0.yyyymmddhhmmss-abcdefabcdef

      在vX.Y.Z-pre(v3.9.0-pre)版本之后提交的commit,其Pseudo version第一部分为vX.Y.Z-pre.0(v3.9.0-pre.0)

      vX.Y.(Z+1)-0.yyyymmddhhmmss-abcdefabcdef

      在vX.Y.Z(v3.9.0)版本之后提交的commit,其Pseudo version第一部分为vX.Y.(Z+1)-0(v3.9.1-0)

      +incompatible

      对于有些依赖没有go.mod的,go.sum会出现+incompatible,比如

      github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPphpL6v8lEs=

      问题

      基于分支commit的版本在改commit被删除之后会导致go mod invalid version

      比如从特性分支合并到主干的时候采用git merge --squash且同时删除特性分支的方式会造成依赖之前依赖特性分支的commit丢失,最后导致依赖这个commit的工程无法build

      基于tag的版本在tag被删除的时候,也会出现go mod invalidjavascript version

      其他语言诸如Java的maven,由仓库管理,除非特殊情况,一般不会去仓库删除版本,一般不会有误操作。go的这php点也要特别注意,在删除tag的时候要小心。

      小结

      go的Pseudo-versions有点类似maven的snapshot的概念,都是基于时间戳的方式,不过go的仓库是基于git仓库的,所以带上了commit的hash信息。但是要特别注意go mod invalid version的问题。

      • Pseudo-versions
      • Where pseudo version with non-existent tag
      • Why go module pseudo version have a specific version?
      • Go Big With Pseudo-Versions and GoCenter

      以上就是golang的Pseudo-versions使用问题解析的详细内容,更多关于golang使用Pseudo-versionwww.devze.coms的资料请关注编程客栈(www.devze.com)其它相关文章!

      0

      上一篇:

      下一篇:

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      最新开发

      开发排行榜