'go build can't find a revision
I developed a repo on computer A and created a go.mod/go.sum that I checked in.
I pull that repo with the go.mod/go.sum files on computer B, but when I try to build the program, the module constraints can't be satisfied.
$ go build
go: finding github.ibm.com/kms/key-protect-client v0.1.5
go: finding golang.org/x/tools v0.0.0-20180221164845-07fd8470d635
go: github.ibm.com/kms/[email protected]: unknown revision v0.1.5
go: error loading module requirements
The repo that is failing is a private repo, and for some reason it doesn't get downloaded to the module cache. On another computer, the dependencies are downloaded and the build succeeds. I am building another private repo in that same domain, so I know that my github credentials give me access to these repos. But for some reason, the go module system can't get to the dependent repo.
I cannot find more information how to debug this.
Solution 1:[1]
Problem is related to cmd/go not being aware of git identities and assuming there is only one articulated in the .gitconfig file.
Work-around: have a set of git identities ready to replace global .gitconfig when you need to work with that git identity and are dealing with cmd/go tools that update the module file.
Solution 2:[2]
Possible solutions for golang unknown revision if you are using private repository:
git config --global url."ssh://git@yourserver".insteadOf "https://yourserver"
Check your git repository permissions
Solution 3:[3]
I had the same problem, please, visit the link .
Make sure you have set GO111MODULES
go env -w GO111MODULE=on
Make sure your git configuration is appropriate for private repositories
git config --global url."ssh://[email protected]:acme-corporation".insteadOf "https://github.com/acme-corporation"
Make sure to create a personal access token if using 2FA
git config --global url."https://:[email protected]:acme-corporation".insteadOf "https://github.com/acme-corporation"
in my case after setting:
- ~/.gitconfig
- ~/.bashrc
I had to do the same with the ~ / .netrc file:
machine gitlab.url.com
login <gitlab username>
password <GITLAB_TOKEN>
Solution 4:[4]
if nothing helps (see the former answers before), use this:
go get -u
The -u flag instructs get to update modules providing dependencies of packages named on the command line to use newer minor or patch releases when available.
Furthermore, I recommend using a versions manager like gobrew. You can easily change between the versions because sometimes it can be a version-related issue too.
If you do so, you can also set the compatibility version for your tidy
, e.g:
go mod tidy -compat=1.17
Now you are ready to build:
go clean --modcache
go get -u
go build
Solution 5:[5]
In case getting
"Error": "unknown revision ..."
or
"Error": "invalid version ..."
Make sure that you did not specify hash of PR (pull request). Even a merged PR might be wrong.
Look for the commit hash in the github repo
under /commits
, but not under /pulls
.
See more info here: golang/go#31191 explicitly filters out these kind of commits.
Solution 6:[6]
Just in case, did you add "github.ibm.com/kms"
to your environment variable GOPRIVATE
on computer B? I've had this error occur to me due to exactly this reason.
Solution 7:[7]
In line with some comments above -- I had this problem because my git was fried due to updating to Mojave... the highly upvoted response here (xcode-select --install
) got me past this error message Git is not working after macOS Mojave Update (xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools)
if you are having this problem make sure your go status
etc are working as expected.
Solution 8:[8]
In some cases, in addition to configuring an url-insteadOf configuration in git, you have to disable GOPROXY
and GOSUMDB
, as follows:
$ go env -w GOPROXY=direct GOSUMDB=off
Running go env
before and after shows you the effect. Disabling them using the above command is establishing that this was the reason for the failure. As disabling checksum verification has some security concerns, you might want to keep GOPROXY
and GOSUMDB
for imported public modules. You can find some more information on how to achieve this here:
https://jfrog.com/blog/why-goproxy-matters-and-which-to-pick/
Solution 9:[9]
Usually the reason can be that the repository is private so you should be authorized at first. Create .netrc file and include there your credentials, the full description you can find here. https://www.gnu.org/software/inetutils/manual/html_node/The-_002enetrc-file.html
if you want to build a docker image you can use this DockerFile example
ENV GOPRIVATE "gitlab.com/yourPrivateRepo"
ARG GO_GET_TOKEN_PASS
ARG GO_GET_TOKEN_LOGIN
RUN touch ~/.netrc && \
chmod 600 ~/.netrc && \
echo "machine gitlab.com login ${GO_GET_TOKEN_LOGIN} password ${GO_GET_TOKEN_PASS}" > ~/.netrc
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Ravenwater |
Solution 2 | |
Solution 3 | dixoen |
Solution 4 | Lonely |
Solution 5 | Noam Manos |
Solution 6 | AMSantiago |
Solution 7 | Steven Schkolne |
Solution 8 | |
Solution 9 | har17bar |