2 回答

TA貢獻1895條經驗 獲得超3個贊
我的理解是(a)您正在使用新的 Go 模塊系統,(b)問題的一部分是您在進行本地開發時不希望在不同的存儲庫中不斷將更改推送到 github 或 gitlab。
換句話說,如果您在本地進行了更改,那么聽起來您不想通過 github/gitlab 往返這些更改,以便這些更改在您正在本地處理的相關存儲庫中可見。
最重要的建議
在單個存儲庫中包含 > 1 個模塊會使您的工作流程變得非常復雜。
正如您的示例所示,一般來說,在單個存儲庫中擁有 > 1 個模塊幾乎總是需要持續進行更多工作。這也很難做到正確。對于大多數人來說,這種成本幾乎總是不值得的。此外,通常帶來的好處并不是人們所期望的,或者在某些情況下,在存儲庫中擁有 > 1 個模塊沒有實際好處。
我絕對建議您遵循“1 repo == 1 module”這一普遍遵循的規則,至少現在是這樣。
使用多個存儲庫
鑒于您正在使用 Go 模塊,一種方法是您可以replace
向模塊go.mod
文件添加一條指令,通知該 Go 模塊其他 Go 模塊在磁盤上的位置。
結構示例
例如,如果您有三個存儲庫repo1
,?repo2
,?repo3
,您可以克隆它們,以便它們在本地磁盤上彼此相鄰:
myproject/ ├──?repo1 ├──?repo2 └──?repo3
然后,如果repo1
依賴于repo2
和repo3
,您可以設置go.mod
文件 來repo1
了解其他兩個模塊在磁盤上的相對位置:
repo1 go.mod:
replace?github.com/me/repo2?=>?../repo2 replace?github.com/me/repo3?=>?../repo3
當您位于repo1
目錄或其任何子目錄中時,go
類似go build
或 的命令將使用和 的go test ./....
磁盤版本。repo2
repo3
repo2 go.mod:
如果repo2
取決于repo3
,您還可以設置:
replace?github.com/me/repo3?=>?../repo3
repo3 go.mod:
例如,如果repo3
不依賴于 或repo1
,repo2
那么您不需要將 a 添加replace
到其go.mod
。
額外細節
模塊 wiki 上的替換常見問題replace
解答中更詳細地介紹了該指令。
最后,這取決于您的具體用例,但此時的常見解決方案是使用gohack,它可以自動執行部分過程。特別是,它創建依賴項的可變副本(默認在 中$HOME/gohack
,但位置由$GOHACK
變量控制)。gohack
還設置當前go.mod
文件有一個替換指令來指向該可變副本。

TA貢獻1796條經驗 獲得超7個贊
go get
是可傳遞的,因此您可以將其添加到構建過程中。典型的 Go 項目構建基本上是:
go get -u ./... && go test ./... && go build ./cmd/myapp
它獲取并更新依賴項,運行所有項目測試,然后構建二進制文件。
- 2 回答
- 0 關注
- 167 瀏覽
添加回答
舉報