我的gopath指向$HOME/go
目录。我有一些个人软件包,我不想在github上或其他任何地方分享。但是,当我尝试使用go get -u all
更新远程包时,我得到:
# 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工具认为必须从远程源获取所有内容?
更新:
看起来Go工作空间强迫您将依赖项与用户维护的代码混合在一起。这看起来很不稳定。有时人们想要擦除未使用的垃圾包,并冒着擦除错误文件夹或未提交的东西的风险,以及许多其他问题...有没有办法让用户维护的包与远程获取的依赖项分开?
答案 0 :(得分:4)
go get -u
旨在通过VCS获取更新。如果要有选择地更新包,则必须使用更具体的标识符。您仍然可以使用...
通配符。
例如,这将尝试更新github.com中的所有包:
go get -u github.com/...
总的来说,我会避免盲目地更新所有内容,因为它会更难跟踪依赖项何时破坏某些内容,因为您当前没有使用的不相关项目也会更新其依赖项。
更新回答:
虽然您可以使用多个GOPATH
进行操作(它们的结肠分离就像PATH
一样),但不要这样做;它会导致更多的问题,而不是它有助于。使用单个GOPATH
,甚至更好,每个项目使用一个GOPATH
。这样,您可以更新依赖项,而不会有影响其他项目的风险。您可以通过一些销售工具来帮助解决此问题(例如godep)