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

时间:2019-02-16 10:13:27

标签: go

我为GitHub存储库(执行代码)构建了一个二进制文件,效果很好。没有问题。 我分叉了该存储库,并在HTML文件中修改了与GO代码无关的一行,为新的分叉存储库构建了二进制文件,但是它生成的二进制文件引用了原始存储库代码,无法理解原因。

我什至使用#include "stdafx.h" #include <iostream> using namespace System; using namespace std; int main() { char First[30], Last[30]; printf("Please type in your First Name: "); scanf("%s",&First); fflush(stdout); printf("Please type in your Last Name: "); scanf("%s",&Last); printf("%s %s", Last, First); printf("pause"); return 0; } 命令清除了所有代码,并从$ home / go / bin和repo目录中手动删除了所有已安装的代码,二进制文件,但是它仍然引用原始的repo代码而不是new分叉的代码。


基于Tobias建议的解决方案,我执行了以下步骤: enter image description here

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

enter image description here

3 个答案:

答案 0 :(得分:5)

这是一个常见的问题。引用系统位于“基于位置”,因此它将在“正确”路径中搜索这些文件。如果go模块可以解决此问题,则为Idk,但是至少在不使用go模块时,您必须解决该问题。

您可以通过以下方式解决它

解决方案1 ​​

  1. 下载您分叉的原始存储库:
  

去获取http://github.com/awesome-org/tool

  1. 将叉子添加为远程
  

git remote add awesome-you-for http://github.com/awesome-you/tool

  1. 您必须在原始下载的repo的文件夹中进行更改,并在叉子之间进行推拉操作。
  

git pull-为您的叉子打上基础

     

git push awesome-you-fork

解决方案2

解决方法go get: 您创建了原始存储库将拥有的路径,但是将您自己的fork复制到其中。这样,您就可以将叉推拉。那可能是更好的解决方案

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

答案 1 :(得分:2)

go包的分叉副本存在的问题是,当一个回购中的包实际上是多个go包时,import语句引用原始基础回购,即:github.com/orig/repo

对于只有一个go软件包的存储库来说这不是问题,因为它从不引用自身。

但是如果有多个,即:包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导入orig/repo/B时,它将在本地显示。

如果您需要覆盖其他主要分支仓库之外的导入,您也可以使用replace

强制依赖项来自另一个地方。

答案 2 :(得分:1)

已解决

起初,我认为这是FORK的问题(这是Go语言存储库的分叉常见的问题),但事实证明,这是Repo的特定问题。 必须重新安装其中一个依赖库,才能使分叉存储库正常工作,原始存储库文档中未提及。 最后,此链接帮助:https://github.com/inconshreveable/ngrok/issues/181#issuecomment-65646229,问题不是通用的,而是特定于回购的 我按照上面链接中的以下步骤操作来解决对go-bindata的依赖

go get github.com/jteeuwen/go-bindata
cd $GOPATH/src/github.com/jteeuwen/go-bindata/go-bindata
go build