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

公司的 Go 項(xiàng)目使用 dep 做為依賴管理的工具,在使用的過程中,因?yàn)轫?xiàng)目依賴比較復(fù)雜,經(jīng)常會(huì)遇到依賴沖突導(dǎo)致 dep ensure 命令無法執(zhí)行成功。

比如,正在開發(fā)中的項(xiàng)目A依賴了B和C,而 B 項(xiàng)目也依賴了 C 項(xiàng)目。

依賴關(guān)系.png

A 項(xiàng)目的 Gopkg.toml

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

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

B 項(xiàng)目的 Gopkg.toml

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

接下來 A 項(xiàng)目因?yàn)殚_發(fā)的需要在 C 項(xiàng)目中新開了分支。在該分支合并進(jìn) master 分支之前,需要在 A 項(xiàng)目的 Gopkg.toml中指定分支名稱。

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

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

這時(shí)候再執(zhí)行 dep ensure 是無法成功的,會(huì)提示依賴發(fā)生了沖突。

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

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

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

constraint 與 override 的區(qū)別

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

如果將A項(xiàng)目的 constraint 改為 override , 則會(huì)強(qiáng)制讓 B 項(xiàng)目在拉取 C 項(xiàng)目的代碼時(shí),拉取的是 new_branch 分支上的代碼,避免因?yàn)閰f(xié)同開發(fā)導(dǎo)致的問題。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

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