3 回答
TA贡献1843条经验 获得超7个赞
这是一个常见的问题。“基于位置”的参考系统因此它在“正确”路径中搜索这些文件。Idk if go modules 解决了这个问题,但至少在不使用 go modules 时你必须解决它。
你可以解决它
解决方案 1
下载您通过以下方式分叉的原始存储库:
将您的分叉添加为远程
git remote 添加 awesome-you-fork http://github.com/awesome-you/tool
您必须在原始下载的 repo 的文件夹中进行更改,并向/从您的叉子推送和拉取。
git pull --rebase awesome-you-fork
git push awesome-you-fork
方案二
解决 go get:您创建原始存储库的路径,但将您自己的分支克隆到其中。这样你就可以推拉你的叉子。这可能是更好的解决方案
cd $GOPATH
mkdir -p {src,bin,pkg}
mkdir -p src/github.com/awesome-org/
cd src/github.com/awesome-org/
git clone git@github.com:awesome-you/tool.git # OR: git clone https://github.com/awesome-you/tool.git
cd tool/
go get ./...
这些解决方案是在这里找到的:http://code.openark.org/blog/development/forking-golang-repositories-on-github-and-managing-the-import-path
TA贡献1818条经验 获得超7个赞
一个 go 包的分叉副本的问题是当包实际上是一个 repo 中的多个 go 包时,导入语句引用原始基础 repo,即:github.com/orig/repo
。
对于只有一个 go 包的 repos 来说这不是问题,因为它从不引用自己。
但是如果它有多个,即:包github.com/orig/repo/A
导入github.com/orig/repo/B
然后你把它分叉为:github.com/fork/repo
然后当 go 编译器看到import "github.com/orig/repo/B"
源代码时,它会去下载原始版本而不是你的 fork。
幸运的是,go modules解决了这个问题。
go.mod
基本上,在你的分叉回购的顶部 创建一个并添加:module github.com/orig/repo
然后,go 编译器将假定您是“orig/repo”,而不管您实际上是从哪里检出的。
所以,当orig/repo/A
imports时orig/repo/B
,它会在本地查找。
如果您需要覆盖主分支仓库之外的其他导入,您还可以使用replace强制依赖项来自另一个地方
TA贡献1828条经验 获得超3个赞
解决了
起初我以为是 FORK 的问题(这是 Go 语言 repo 的 fork 的常见问题),但事实证明,这是 Repo 特定的问题。必须重新安装其中一个依赖库才能使分叉的回购工作,这在原始回购文档中没有提到。问题不是通用的,而是特定于 repo 我按照上面链接中的以下步骤解决了对 go-bindata 的依赖
go get github.com/jteeuwen/go-bindata cd $GOPATH/src/github.com/jteeuwen/go-bindata/go-bindata go build
- 3 回答
- 0 关注
- 121 浏览
添加回答
举报