Go 1.5 Vendor Experiment with Git Submodule

一開始當然要先看這篇 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 的時候會有問題。研究出來比較簡單的方式是:

  1. glide,或只要類似功能的都 可以。

  2. glide init,如果之前有用 godep 之類其他的,它會自動嘗試匯入,不 然會自己找關聯。跑完會產生 glide.yaml。注意,這邊只會找第一層,也 就是你的專案裡面直接 import 的關聯。glide.yaml是可以自己編的,要 固定版本等等的都是在這邊指定。

  3. glide install,會遍查各層關聯,把所有用到的全部抓下來放到 vendor,並把版本也一併列出放入 glide.lock。這檔案是自動產生,自 己編了下一次跑也會被蓋掉。

  4. 接下來用這支 python script 自動產生命令,餵給 shell 執行。python glide-gitsubmodule.py | sh