网站首页 > 技术文章 正文
序
本文主要研究一下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:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
问题
?
基于分支commit的版本在改commit被删除之后会导致go mod invalid version
比如从特性分支合并到主干的时候采用git merge --squash且同时删除特性分支的方式会造成依赖之前依赖特性分支的commit丢失,最后导致依赖这个commit的工程无法build
?
基于tag的版本在tag被删除的时候,也会出现go mod invalid version
其他语言诸如java的maven,由仓库管理,除非特殊情况,一般不会去仓库删除版本,一般不会有误操作。go的这点也要特别注意,在删除tag的时候要小心。
小结
go的Pseudo-versions有点类似maven的snapshot的概念,都是基于时间戳的方式,不过go的仓库是基于git仓库的,所以带上了commit的hash信息。但是要特别注意go mod invalid version的问题。
doc
?Pseudo-versions[1]
?Where pseudo version with non-existent tag[2]
?Why go module pseudo version have a specific version?[3]
?Go Big With Pseudo-Versions and GoCenter[4]
外部链接
[1] Pseudo-versions https://golang.org/cmd/go/#hdr-Pseudo_versions
[2] Where pseudo version with non-existent tag https://stackoverflow.com/questions/58175969/where-pseudo-version-with-non-existent-tag
[3] Why go module pseudo version have a specific version? https://stackoverflow.com/questions/62810261/why-go-module-pseudo-version-have-a-specific-version
[4] Go Big With Pseudo-Versions and GoCenter https://jfrog.com/blog/go-big-with-pseudo-versions-and-gocenter/
- 上一篇: 超级详细的Git使用教程(git怎么用?)
- 下一篇: 持续交付之基于Git Flow代码分支策略实践
猜你喜欢
- 2024-10-27 git 入门教程之紧急修复(git checkout . 恢复)
- 2024-10-27 项目版本管理的最佳实践:飞流Flow篇
- 2024-10-27 DevOps(4)之分支模型(ps4如何构建画布)
- 2024-10-27 Git 在团队中的最佳实践——如何正确使用Git Flow
- 2024-10-27 鹅厂程序员干货分享 | 四种工作流,教你如何使用 GitHub
- 2024-10-27 Linux下git和github搭建使用教程(linux搭建git仓库)
- 2024-10-27 git这个小技巧非常实用,值得每个程序员学习
- 2024-10-27 Git实战002:Git快速入门使用详解(git简单教程)
- 2024-10-27 git 多人在同一分支上迭代开发时,如何保证分支提交历史保持线性
- 2024-10-27 Git基础知识(七)--分支开发工作流
- 最近发表
-
- Excel神器!用Barcode控件轻松实现二维码标签批量打印
- Made in China: The story behind the label
- 圆圈数字符号0到100圈怎么打(圆圈+数字)
- 基于MATLAB的雅克比与高斯-赛德尔迭代法的求解方程组计算App
- 一文详解MFC Tab Control 选项卡控件
- 收藏|空调、制冷仪器、仪表词汇中英文对照表
- ASP.NET Core 内置的Tag Helpers(asp.net core api)
- 关注 | Django基本操作(django管理页面)
- Nodejs之MEAN栈开发(四)-- form验证及图片上传
- 排查Java内存泄露实战(内附各种排查工具介绍)
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)