Go工作区问题:如何区分本地包和远程包?

Go工作区问题:如何区分本地包和远程包?,go,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 re

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

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

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

go get -u github.com/...
但一般来说,我会避免盲目地更新所有内容,因为这会使跟踪依赖项何时破坏某些内容变得更加困难,因为您当前未使用的无关项目也会更新它们的依赖项

更新答案:


虽然您可以使用多个
GOPATH
(它们是冒号分隔的,就像
PATH
),但不要这样做;这将导致更多的问题,而不是它的帮助。使用单个
GOPATH
,更好的是,每个项目使用单个
GOPATH
。这样,您就可以更新依赖项,而不会影响其他项目。有一些供应商工具可以帮助您解决这个问题(例如)

用户维护代码和依赖项之间的混合在我看来非常不稳定,所以我更新了这个问题。很好的回答,顺便说一句。很高兴了解外卡。@marcioAlmada:对你的更新有回应。简而言之,不要担心代码的混合,远程DEP处于版本控制中(您的本地代码也应该是,对不对;)。如果您需要任何内容的多个版本,请在不同的GOPATH中使用多个副本。