一開始當然要先看這篇
Go 1.5 Vendor Experiment了解一下究竟
怎麼做的,簡言之就是把 /vendor
這目錄當成類似 /node_modules
這樣的
概念去用,從目錄最尾端開始往上,有就優先用,都沒有才會用到 GOPATH
裡
面的。
由於最終打算用 docker
包起來,所以想用 git submodule
來管 vendor
底下的東西,這樣 docker build
的過程中可以不需要裝 godep
這樣的
package manager,也不用把關聯的程式碼放入 vcs 裡。但在把專案換過去的時
候,覺得最麻煩的是沒有適合的自動化工具,godep save
是在 GOPATH
的想
法下運作的,若把 GO15VENDOREXPERIMENT=1
打開,會把目前用到的複製到
vendor
底下,然後不包括 vcs 目錄例如 .git
,這個在轉換到 submodule
的時候會有問題。研究出來比較簡單的方式是:
裝 glide,或只要類似功能的都 可以。
glide init
,如果之前有用godep
之類其他的,它會自動嘗試匯入,不 然會自己找關聯。跑完會產生glide.yaml
。注意,這邊只會找第一層,也 就是你的專案裡面直接import
的關聯。glide.yaml
是可以自己編的,要 固定版本等等的都是在這邊指定。glide install
,會遍查各層關聯,把所有用到的全部抓下來放到vendor
,並把版本也一併列出放入glide.lock
。這檔案是自動產生,自 己編了下一次跑也會被蓋掉。接下來用這支 python script 自動產生命令,餵給 shell 執行。
python glide-gitsubmodule.py | sh