HiveBrain v1.2.0
Get Started
← Back to all entries
patterngoCritical

Using forked package import in Go

Submitted by: @import:stackoverflow-api··
0
Viewed 0 times
importpackageforkedusing

Problem

Suppose you have a repository at github.com/someone/repo and you fork it to github.com/you/repo. You want to use your fork instead of the main repo, so you do a

go get github.com/you/repo


Now all the import paths in this repo will be "broken", meaning, if there are multiple packages in the repository that reference each other via absolute URLs, they will reference the source, not the fork.

Is there a better way as cloning it manually into the right path?

git clone git@github.com:you/repo.git $GOPATH/src/github.com/someone/repo

Solution

If you are using go modules. You could use replace directive

The replace directive allows you to supply another import path that might
be another module located in VCS (GitHub or elsewhere), or on your
local filesystem with a relative or absolute file path. The new import
path from the replace directive is used without needing to update the
import paths in the actual source code.

So you could do below in your go.mod file

module some-project

go 1.12

require (
    github.com/someone/repo v1.20.0
)

replace github.com/someone/repo => github.com/you/repo v3.2.1


where v3.2.1 is tag on your repo. Also can be done through CLI

go mod edit -replace="github.com/someone/repo@v0.0.0=github.com/you/repo@v1.1.1"

Code Snippets

module some-project

go 1.12

require (
    github.com/someone/repo v1.20.0
)

replace github.com/someone/repo => github.com/you/repo v3.2.1
go mod edit -replace="github.com/someone/repo@v0.0.0=github.com/you/repo@v1.1.1"

Context

Stack Overflow Q#14323872, score: 192

Revisions (0)

No revisions yet.