Go工作区问题:如何将本地软件包与远程软件包区分开来?

时间:2014-12-03 13:59:06

标签: go

我的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工作空间强迫您将依赖项与用户维护的代码混合在一起。这看起来很不稳定。有时人们想要擦除未使用的垃圾包,并冒着擦除错误文件夹或未提交的东西的风险,以及许多其他问题...有没有办法让用户维护的包与远程获取的依赖项分开?

1 个答案:

答案 0 :(得分:4)

go get -u旨在通过VCS获取更新。如果要有选择地更新包,则必须使用更具体的标识符。您仍然可以使用...通配符。

例如,这将尝试更新github.com中的所有包:

go get -u github.com/...

总的来说,我会避免盲目地更新所有内容,因为它会更难跟踪依赖项何时破坏某些内容,因为您当前没有使用的不相关项目也会更新其依赖项。

更新回答:

虽然您可以使用多个GOPATH进行操作(它们的结肠分离就像PATH一样),但不要这样做;它会导致更多的问题,而不是它有助于。使用单个GOPATH,甚至更好,每个项目使用一个GOPATH。这样,您可以更新依赖项,而不会有影响其他项目的风险。您可以通过一些销售工具来帮助解决此问题(例如godep