如何Fork Go packages

输入图片说明

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 接受时,您现在唯一需要执行的操作是删除repoglide update再次运行。

这只是glide所能提供的功能之一,需要了解更详细的信息可以参考glide文档

还请记住,随着代码更改,请始终向upstream/master提交PR 。它将以同样的方式使您的社区受益!

输入图片说明

我的博客首页,请多多支持: https://wilhelmguo.tk

转载于:https://my.oschina.net/u/2612999/blog/1813428

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值