2014-12-03 60 views
3

我的gopath指向$HOME/go目錄。我還有一些我不想在github或其他任何地方分享的個人軟件包。然而,當我嘗試用go get -u all更新遠程包我得到:Go工作空間問題:如何區分遠程軟件包中的本地軟件包?

# cd /home/go/src/marcio/somePackage; git pull --ff-only 
fatal: No remote repository specified. Please, specify either a URL or a 
remote name from which new revisions should be fetched. 
package code.google.com/p/go.tools/astutil 
     ... 
     long list of dependencies 
     ... 
     imports marcio/somePackage: exit status 1 

這是非常混亂。我如何告訴go get將我維護的軟件包與用作依賴關係的軟件包不同?爲什麼go工具認爲所有東西都必須從遠程源獲取?


UPDATE:

它看起來像圍棋的工作空間強加你混合用戶維護代碼的依賴關係。這看起來不穩定。有時候,人們想要擦掉未使用的垃圾包,並且存在擦除錯誤的文件夾或未提交的東西的風險,以及許多其他問題......是否有任何方法將用戶維護的包與遠程取回的相關性分開?

回答

4

go get -u旨在通過VCS獲取更新。如果您想有選擇地更新軟件包,則必須使用更具體的標識符。您仍然有...通配符也可以使用。

例如,這將嘗試和更新所有的包從github.com:

go get -u github.com/... 

雖然在一般,我會避免盲目更新的一切,因爲這將使其難以追蹤時的依賴已經打破因爲您目前沒有使用的無關項目也會更新其依賴關係。

更新答案:

雖然你可以操作多個GOPATH的(他們冒號分隔就像PATH),不這樣做;它會導致更多的問題,而不是它幫助。使用單個GOPATH,甚至更好,每個項目使用一個單獨的GOPATH。這樣你可以更新依賴關係而不會影響其他項目。有一些工具可以幫助你解決這個問題(例如godep

+0

用戶維護的代碼和依賴項之間的這種混合看起來對我來說非常不穩定,所以我更新了這個問題。好的答案,順便說一句。很好地瞭解這張外卡。 – marcio 2014-12-04 01:12:05

+0

@marcioAlmada:回覆您的更新。總之,不要擔心混合代碼,並且遠程代碼處於版本控制中(並且您的本地代碼應該也是如此,對;))。如果您需要多個版本的任何東西,請在不同的GOPATH中使用多個副本。 – JimB 2014-12-04 01:46:54