Go Mod Private Repo

14.5k Views Asked by At

So I have a private repo that my main.go imports. I'm getting this error when I do a go build:

cannot find module for path

Do I need to do anything special for a private repo? I have been googling and can't find any good information. It works fine with dep.

4

There are 4 best solutions below

2
On BEST ANSWER

Do this

git config --global --add url."[email protected]:".insteadOf "https://your-repo.com/"
export GOPRIVATE='your-repo.com'

Make sure your git clone via ssh works.

1
On

Given that such a private repo is often in active development, I personally simply clone it to the "proper" location in my $GOPATH and use the source management (e.g. git) as you would any other project. Adding the SSH key as in Rodrigo's answer is great, but if you are actively developing the private repo anyway, the extra step to clone it to the right directory isn't by any means a difficult step vs being able to go get it.

So, for example, for a private repo hosted on Github, I would cd to $GOHOME/src/github.com/git-username-for-repo then git clone the-repo

1
On

You should use a SSH Key to fetch your repository, check if your SSH key is in system keychain too:

ssh-add -K ~/.ssh/id_rsa

0
On

(Answer duplicated from this SO Question)

I wrote up a solution for this on Medium: Go Modules with Private Git Repositories.

The way we handle it is basically the same as the answer from Alex Pliutau, and the blog goes into some more detail with examples for how to set up your git config with tokens from GitHub/GitLab/BitBucket. It also goes into a working Dockerfile example for using modules with private repos.

The relevant bit for GitLab:

git config --global \
  url."https://oauth2:${personal_access_token}@privategitlab.com".insteadOf \
  "https://privategitlab.com"

#or 

git config --global \
  url."https://${user}:${personal_access_token}@privategitlab.com".insteadOf \
  "https://privategitlab.com"

I hope it's helpful.