使用 override 解決 dep 中的依賴沖突

公司的 Go 項目使用 dep 做為依賴管理的工具,在使用的過程中,因為項目依賴比較復雜,經常會遇到依賴沖突導致 dep ensure 命令無法執行成功。

比如,正在開發中的項目A依賴了B和C,而 B 項目也依賴了 C 項目。

依賴關系.png

A 項目的 Gopkg.toml

[[constraint]]
  branch = "master"
  name = "B"

[[constraint]]
  branch = "master"
  name = "C"

B 項目的 Gopkg.toml

[[constraint]]
  branch = "master"
  name = "C"

接下來 A 項目因為開發的需要在 C 項目中新開了分支。在該分支合并進 master 分支之前,需要在 A 項目的 Gopkg.toml中指定分支名稱。

[[constraint]]
  branch = "master"
  name = "B"

[[constraint]]
  branch = "new_branch"
  name = "C"

這時候再執行 dep ensure 是無法成功的,會提示依賴發生了沖突。

解決沖突的方法也很簡單,在A項目的 Gopkg.toml中將C項目的constraint改為 override 就可以了。等到C項目的修改合并進 master 分支時,再將 constraint 改回來。

[[constraint]]
  branch = "master"
  name = "B"

[[override]]
  branch = "new_branch"
  name = "C"

constraint 與 override 的區別

dep 會如實得處理 constraint 類型的依賴,在這個例子中,盡管在 A 的依賴中將 C 的分支設置為 new_branch,但是在B項目中,引用的包還是依舊使用 master 分支 的代碼。

如果將A項目的 constraint 改為 override , 則會強制讓 B 項目在拉取 C 項目的代碼時,拉取的是 new_branch 分支上的代碼,避免因為協同開發導致的問題。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,881評論 18 139
  • 我是塘沽貽成小學一年級的學生,在寒假生活中認識和學習了書里的生字。通過每天固定10個漢字的書寫和拼讀,以及生字組詞...
    王茗鈺閱讀 455評論 4 1
  • 1月18日精進,今日體驗:晚上開會一起生發了剎車油,剎車片,剎車盤話術,感覺自己說話又有了很大的進步,再多練習練習!
    京心達田佳閱讀 195評論 0 0
  • 從前,有一個樵夫每天都上山砍柴。這天他早早的又去了,砍好柴準備回家。突然聽見林子里有狗叫。他看見有只小狗被捕獸夾夾...
    玫清閱讀 1,134評論 1 3
  • 即將過去的2016年對我來說是及其不平凡的一年,我經歷了工作的調整,家庭成員的變化,生活角色大轉變,可謂煩惱與歡喜...
    ded846798462閱讀 157評論 0 0