golang的Pseudo-versions使用問題解析
序
本文主要研究一下golang的Pseudo-versions
Pseudo-versions
定義
Pseudo-versions,中文大概是偽版本的意思,就是沒有打語義版本tag(semantic version tags
)的會使用偽版本
格式
類似v0.0.0-yyyymmddhhmmss-abcdefabcdef
,中間的時間為UTC時間(東八區(qū)為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會出現(xiàn)+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被刪除的時候,也會出現(xiàn)go mod invalid version
其他語言諸如java的maven,由倉庫管理,除非特殊情況,一般不會去倉庫刪除版本,一般不會有誤操作。go的這點也要特別注意,在刪除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-versions的資料請關注腳本之家其它相關文章!
相關文章
Golang中基礎的命令行模塊urfave/cli的用法說明
這篇文章主要介紹了Golang中基礎的命令行模塊urfave/cli的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12go數(shù)據(jù)結構和算法BitMap原理及實現(xiàn)示例
這篇文章主要為大家介紹了go數(shù)據(jù)結構和算法BitMap原理及實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-07-07go?tool?pprof?參數(shù)?'-base'?和?'-diff_base&
這篇文章主要介紹了go?tool?pprof?參數(shù)?'-base'?和?'-diff_base'之間的區(qū)別,兩個參數(shù)都是用于計算當前?profile文件減去基準profile文件所獲得的差值,用這個差值生成一個新的profile文件,本文給大家介紹的非常詳細,需要的朋友可以參考下2023-05-05