2 回答
TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個(gè)贊
如何移動(dòng)到版本 2 有兩個(gè)選項(xiàng):分支和子目錄。
這兩個(gè)選項(xiàng)使一個(gè)版本可以依賴另一個(gè)版本。例如,當(dāng)您實(shí)施版本 2 時(shí),您可以更新版本 1 以依賴于版本 2(但保持相同的 v1 API)。然后,您只需要為您的庫實(shí)現(xiàn)一種邏輯。根據(jù)項(xiàng)目類型、您要提供的支持以及它需要的修復(fù),這可能適合您也可能不適合您。
分支機(jī)構(gòu)
master:?A?->?B?(v1.0.0)?->?D?(v1.0.1) ?????????????????????????\ v2:???????????????????????->?C?(v2.0.0)
在這種情況下:
你在分支上開始你的項(xiàng)目
master,做一些提交(
A和B),標(biāo)簽
v1.0.0。您決定進(jìn)行重大更改。因此,您創(chuàng)建了一個(gè)新分支 (?
git checkout -b v2) 并進(jìn)行了重大更改。您的 go.mod 現(xiàn)在必須更新,以便模塊名稱以/v2(它本質(zhì)上是一個(gè)新模塊?。┙Y(jié)尾。您決定修復(fù) 中的錯(cuò)誤
v1,因此您返回該分支,進(jìn)行新提交并標(biāo)記新v1版本。
當(dāng)用戶需要您的模塊的特定版本時(shí),go將在兩個(gè)分支中查找哪個(gè)提供了正確的模塊。
子目錄
不想在分支上開發(fā)怎么辦?您可以為每個(gè)主要版本創(chuàng)建一個(gè)子目錄。版本 1 位于頂層,然后新版本移至子目錄:
go.mod (module example.com/foo)
foo.go
v2/
? go.mod (module example.com/foo/v2)
? foo.go
當(dāng)您使用新版本標(biāo)記此 repo 時(shí),v1將使用頂級(jí)版本。v2標(biāo)簽將使用v2子目錄。
TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超8個(gè)贊
來自模塊 wiki 的發(fā)布模塊(v2 或更高版本)部分:
有兩種可供選擇的機(jī)制來發(fā)布 v2 或更高版本的模塊。請(qǐng)注意,使用這兩種技術(shù),當(dāng)模塊作者推送新標(biāo)簽時(shí),新模塊版本可供消費(fèi)者使用。使用創(chuàng)建發(fā)布的示例
v3.0.0,兩個(gè)選項(xiàng)是:
主要分支:更新文件以在指令中的模塊路徑末尾
go.mod包含一個(gè)(例如,)。更新模塊中的 import 語句以也使用(eg,?)。用 標(biāo)記發(fā)布。/v3modulemodule github.com/my/module/v3/v3import "github.com/my/module/v3/mypkg"v3.0.0
Go 版本 1.9.7+、1.10.3+ 和 1.11+ 能夠正確使用和構(gòu)建使用這種方法創(chuàng)建的 v2+ 模塊,而無需更新尚未選擇加入模塊的消費(fèi)者代碼(如“語義導(dǎo)入版本控制”?部分)。
注意:不需要?jiǎng)?chuàng)建新分支。例如,如果您之前已經(jīng)在 master 上發(fā)布,并且更愿意在 master 上標(biāo)記 v3.0.0,這也是一個(gè)可行的選擇。[...]
[...]
主要子目錄:創(chuàng)建一個(gè)新的
v3子目錄(例如,my/module/v3)并go.mod在該子目錄中放置一個(gè)新文件。模塊路徑必須以/v3.?將代碼復(fù)制或移動(dòng)到?v3子目錄中。更新模塊中的 import 語句以也使用/v3(eg,?import "github.com/my/module/v3/mypkg")。用 標(biāo)記發(fā)布v3.0.0。
但是,該部分中還有其他值得回顧的詳細(xì)信息。
- 2 回答
- 0 關(guān)注
- 176 瀏覽
添加回答
舉報(bào)
