golang的Pseudo-versions使用問題解析
序
本文主要研究一下golang的Pseudo-versions
Pseudo-versions
定義
Pseudo-versions,中文大概是偽版本的意思,就是沒有打語(yǔ)義版本tag(semantic version tags)的會(huì)使用偽版本
格式
類似v0.0.0-yyyymmddhhmmss-abcdefabcdef,中間的時(shí)間為UTC時(shí)間(東八區(qū)為utc+8),最后的12位為git commit的hash的前12位
forms
vX.0.0-yyyymmddhhmmss-abcdefabcdef
如果之前都沒有major的語(yǔ)義版本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
對(duì)于有些依賴沒有g(shù)o.mod的,go.sum會(huì)出現(xiàn)+incompatible,比如
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
問題
基于分支commit的版本在改commit被刪除之后會(huì)導(dǎo)致go mod invalid version
比如從特性分支合并到主干的時(shí)候采用git merge --squash且同時(shí)刪除特性分支的方式會(huì)造成依賴之前依賴特性分支的commit丟失,最后導(dǎo)致依賴這個(gè)commit的工程無法build
基于tag的版本在tag被刪除的時(shí)候,也會(huì)出現(xiàn)go mod invalid version
其他語(yǔ)言諸如java的maven,由倉(cāng)庫(kù)管理,除非特殊情況,一般不會(huì)去倉(cāng)庫(kù)刪除版本,一般不會(huì)有誤操作。go的這點(diǎn)也要特別注意,在刪除tag的時(shí)候要小心。
小結(jié)
go的Pseudo-versions有點(diǎn)類似maven的snapshot的概念,都是基于時(shí)間戳的方式,不過go的倉(cāng)庫(kù)是基于git倉(cāng)庫(kù)的,所以帶上了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使用問題解析的詳細(xì)內(nèi)容,更多關(guān)于golang使用Pseudo-versions的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
一文詳解下劃線字段在golang結(jié)構(gòu)體中的應(yīng)用
這篇文章主要為大家詳細(xì)介紹了下劃線字段在golang結(jié)構(gòu)體中應(yīng)用的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-08-08
Go語(yǔ)言使用GORM操作數(shù)據(jù)庫(kù)使用指南
GORM(全稱為Go?Object?Relational?Mapping)是一個(gè)在Go語(yǔ)言中使用的輕量級(jí)的對(duì)象關(guān)系映射(ORM)庫(kù),本文主要為大家介紹了GORM操作數(shù)據(jù)庫(kù)具體方法,需要的可以參考一下2023-05-05

