分叉存储库上的“go build”问题

我为 GitHub 存储库(go 代码)构建了一个二进制文件,它工作正常。没有问题。我分叉了那个 repo,并修改了 HTML 文件中与 GO 代码无关的一行,为新的分叉 repo 构建了二进制文件,但它生成的二进制文件引用了原始 repo 代码,不明白为什么。

我什至使用命令清理了所有代码go clean -i all并手动删除了所有已安装的代码、$home/go/bin 和 repo 目录中的二进制文件,但它仍然引用原始 repo 代码而不是新的分叉代码。


根据 Tobias 建议的解决方案,我执行了以下步骤:

http://img.mukewang.com/647dc8ae0001807f09240277.jpg

之后,我go build在那个repo目录下执行,但是新的二进制文件仍然引用旧代码。我什至删除了旧的二进制文件并生成了一个新文件。

http://img4.mukewang.com/647dc8b8000125b806100074.jpg


隔江千里
浏览 122回答 3
3回答

蓝山帝景

这是一个常见的问题。“基于位置”的参考系统因此它在“正确”路径中搜索这些文件。Idk if go modules 解决了这个问题,但至少在不使用 go modules 时你必须解决它。你可以解决它解决方案 1下载您通过以下方式分叉的原始存储库:去获取http://github.com/awesome-org/tool将您的分叉添加为远程git remote 添加 awesome-you-fork http://github.com/awesome-you/tool您必须在原始下载的 repo 的文件夹中进行更改,并向/从您的叉子推送和拉取。git pull --rebase awesome-you-forkgit push awesome-you-fork方案二解决 go get:您创建原始存储库的路径,但将您自己的分支克隆到其中。这样你就可以推拉你的叉子。这可能是更好的解决方案cd $GOPATHmkdir -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.gitcd tool/go get ./...这些解决方案是在这里找到的:http://code.openark.org/blog/development/forking-golang-repositories-on-github-and-managing-the-import-path

qq_笑_17

一个 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/Aimports时orig/repo/B,它会在本地查找。如果您需要覆盖主分支仓库之外的其他导入,您还可以使用replace强制依赖项来自另一个地方

倚天杖

解决了起初我以为是 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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go