如何Fork Go packages

輸入圖片說明

Go使得使用軟件包變得很是簡單,全部你須要作的就是......git

$ go get github.com/org/magic

可是當你發現一個bug或想要擴展包時,你會作什麼?一般在Github上fork,作一些修改,向上遊提交一個PR ,而後使用你的分支項目,直到你的代碼被合併到upstream / master。使用Go軟件包有點困難,由於你不能這麼作github

$ go get github.com/ fork / magic

這是不正確的,由於若是你派生一個具備引用自身的import語句的倉庫,它們將在fork中被破壞。sass

你可使用的解決方案之一是設置一個不一樣的遠程並拉代碼

$ 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(推送)

而後您能夠設置您的遠程分支並提取您的代碼...bash

$ git remote add fork https://github.com/ fork / magic .git
$ git pull fork master

這將容許您使用您的應用程序測試和運行您的代碼。這很容易,但它帶有一些維護問題,可能會在將來輕鬆地破壞您的應用程序。例如,若是你運行ide

$ go get -u github.com/org/magic

它會將你的軟件包更新回master分支,而且你的改變將會消失,若是你沒有 vendor 包而且想要在Dockerfile中使用你的軟件包,你將須要在那裏寫一些東西來使用你的分支軟件包。測試

還有一種解決方案是使用Glide:vendor包管理Golang。

首先,您須要安裝glide,而後glide init可使用命令設置新項目,glide update使用掃描和規則從新生成依賴項版本,而後glide install安裝glide.lock文件中列出的版本,跳過掃描,除非glide.lock未找到該文件將執行更新。fetch

可是,glide如何幫我解決fork問題?在glide.yaml配置中。code

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文檔rem

還請記住,隨着代碼更改,請始終向upstream/master提交PR 。它將以一樣的方式使您的社區受益!

輸入圖片說明

個人博客首頁,請多多支持: https://wilhelmguo.tk

相關文章
相關標籤/搜索