我正在尝试从本地目录安装一个 go 包(基本上我签出了现有包并应用了挂起的拉取请求(。
$ # Both commands give a similar output
$ go get -u file:///Users/me/workspaces/go/somepackage
$ go get -u /Users/me/workspaces/go/somepackage
unrecognized import path "[...]" (import path does not begin with hostname)
由于go get
正在下载然后安装,因此我尝试了:
$ go install /Users/me/workspaces/go/somepackage
[] cannot import absolute path
任何有经验的围棋用户都可以帮忙吗?
如果您只想使用其他分支(您的 PR 分支(,则可以继续使用原始导入路径。
- 先去获取原始包。
- 进入本地文件系统中下载的包
cd $GOPATH/pkg/<package directory>
从 - 本地包缓存中,切换到要从中提取的分支。
git checkout <PR branch>
- 现在
go get -u <package>
如果包在本地可用,则 go get update 将只从本地包签出到的分支中提取最新代码。
我所知,你不能用go get
做到这一点,你可以手动将目录复制到GOPATH中。如果您分叉了example.com/somepackage
则/Users/me/workspaces/go/somepackage
复制到~/go/src/example.com/somepackage
或./vendor/example.com/somepackage
。
话虽如此,最好的解决方案通常是将分叉代码托管在某个地方,然后使用该导入路径。 dep 和模块等体面工具支持为包获取不同的来源。
我可能是错的,也许存在解决方法
Go documentantion on cmd/go/#hdr-Remote_import_paths 说:
支持的版本控制系统包括:
Bazaar .bzr Fossil .fossil Git .git Mercurial .hg Subversion .svn
后来:
例如
import "example.org/pkg/foo"
将导致以下请求:
https://example.org/pkg/foo?go-get=1 (preferred)
http://example.org/pkg/foo?go-get=1 (fallback, only with -insecure)
所以我想go get
永远不会在文件系统存储库中查找。
需要调查go get
的源代码才能确定。
如果有人能证明我在这个问题上不正确,我会很高兴。
更新
也许我弄错了,但我想go get
使用VCS的所有能力都在这里:https://github.com/golang/go/blob/master/src/cmd/go/internal/get/vcs.go
而且我在这里看不到使用 git 本地存储库的可能性。