Go使得使用软件包变得非常简单,所有你需要做的就是......
$ go get github.com/org/magic
但是当你发现一个bug或想要扩展包时,你会做什么?通常在Github上fork,做一些修改,向上游提交一个PR ,然后使用你的分支项目,直到你的代码被合并到upstream / master。使用Go软件包有点困难,因为你不能这么做
$ go get github.com/ fork / magic
这是不正确的,因为如果你派生一个具有引用自身的import语句的仓库,它们将在fork中被破坏。
你可以使用的解决方案之一是设置一个不同的远程并拉代码
$ go get github.com/org/magic
$ cd $ GOPATH / src / github.com / org / magic
$ git remote -v
origin https://github.com/ org / magic .git(fetch)
origin https:/ /github.com/ org / magic(推送)
然后您可以设置您的远程分支并提取您的代码...
$ git remote add fork https://github.com/ fork / magic .git
$ git pull fork master
这将允许您使用您的应用程序测试和运行您的代码。这很容易,但它带有一些维护问题,可能会在未来轻松地破坏您的应用程序。例如,如果你运行
$ go get -u github.com/org/magic
它会将你的软件包更新回master分支,并且你的改变将会消失,如果你没有 vendor 包并且想要在Dockerfile中使用你的软件包,你将需要在那里写一些东西来使用你的分支软件包。
还有一种解决方案是使用Glide:vendor包管理Golang。
首先,您需要安装glide,然后glide init可以使用命令设置新项目,glide update使用扫描和规则重新生成依赖项版本,然后glide install安装glide.lock文件中列出的版本,跳过扫描,除非glide.lock未找到该文件将执行更新。
但是,glide如何帮我解决fork问题?在glide.yaml配置中。
package: github.com/sasso/my-project
import:
- package: github.com/org/magic
repo: https://github.com/fork/magic.git
通过添加repoglide将始终从您的fork拉代码,并允许任何生成系统总是使用fork包。当您的代码更改被upstream/master 接受时,您现在唯一需要执行的操作是删除repo并glide update再次运行。
这只是glide所能提供的功能之一,需要了解更详细的信息可以参考glide文档。
还请记住,随着代码更改,请始终向upstream/master提交PR 。它将以同样的方式使您的社区受益!
我的博客首页,请多多支持: https://wilhelmguo.tk