可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I'm searching for the way to get $ go get
work with private repository, after many google try.
The first try:
$ go get -v gitlab.com/secmask/awserver-go
Fetching https://gitlab.com/secmask/awserver-go?go-get=1
https fetch failed.
Fetching http://gitlab.com/secmask/awserver-go?go-get=1
Parsing meta tags from http://gitlab.com/secmask/awserver-go?go-get=1 (status code 200)
import "gitlab.com/secmask/awserver-go": parse http://gitlab.com/secmask/awserver-go?go-get=1: no go-import meta tags
package gitlab.com/secmask/awserver-go: unrecognized import path "gitlab.com/secmask/awserver-go
Yep, it did not see the meta tags because I could not know how to provide login information.
The second try:
Follow https://gist.github.com/shurcooL/6927554. Add config to .gitconfig.
[url "ssh://git@gitlab.com/"]
insteadOf = https://gitlab.com/
$ go get -v gitlab.com/secmask/awserver-go --> not work
$ go get -v gitlab.com/secmask/awserver-go.git --> work but I got src/gitlab.com/secmask/awserer-go.git
Yes it work but with .git
extension with my project name, I can rename it to original but do it everytime $ go get
is not so good, is there an otherway?
回答1:
The proper way is to manually put the repository in the right place. Once the repository is there, you can use go get -u
to update the package and go install
to install it. A package named
github.com/secmask/awserver-go
goes into
$GOPATH/src/github.com/secmask/awserver-go
The commands you type are:
cd $GOPATH/src/github.com/secmask
git clone git@github.com:secmask/awserver-go.git
回答2:
According to this link - https://gist.github.com/shurcooL/6927554 - you have two things to configure. The example is based on GitHub but this shouldn't change the process
$ git config --global url.git@github.com:.insteadOf https://github.com/
$ cat ~/.gitconfig
[url "git@github.com:"]
insteadOf = https://github.com/
$ go get github.com/private/repo
回答3:
I had a problem with go get
using private repository on gitlab from our company.
I lost a few minutes trying to find a solution. And I did find this one:
You need to get a private token at:
https://gitlab.mycompany.com/profile/account
Configure you git to add extra header with your private token:
$ git config --global http.extraheader "PRIVATE-TOKEN: YOUR_PRIVATE_TOKEN
Configure your git to convert requests from ssh to http:
$ git config --global url."git@gitlab.mycompany.com:".insteadOf "https://gitlab.mycompany.com/"
Finally you can use your go get
normally:
$ go get gitlab.com/company/private_repo
回答4:
That looks like the GitLab issue 5769.
In GitLab, since the repositories always end in .git
, I must specify .git
at the end of the repository name to make it work, for example:
import "example.org/myuser/mygorepo.git"
And:
$ go get example.org/myuser/mygorepo.git
Looks like GitHub solves this by appending ".git"
.
It is supposed to be resolved in “Added support for Go's repository retrieval. #5958”, provided the right meta tags are in place.
Although there is still an issue for Go itself: “cmd/go
: go get cannot discover meta tag in HTML5 documents”.
回答5:
I have created a user specific ssh-config, so my user automatically logs in with the correct credentials and key.
First I needed to generate an key-pair
ssh-keygen -t rsa -b 4096 -C "my@email.here"
and saved it to e.g ~/.ssh/id_my_domain
. Note that this is also the keypair (private and public) I've connected to my Github account, so mine is stored in~/.ssh/id_github_com
.
I have then created (or altered) a file called ~/.ssh/config
with an entry:
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_github_com
On another server, the "ssh-url" is admin@domain.com:username/private-repo.git
and the entry for this server would have been:
Host domain.com
HostName domain.com
User admin
IdentityFile ~/.ssh/id_domain_com
Just to clarify that you need ensure that the User
, Host
and HostName
is set correctly.
Now I can just browse into the go path and then go get <package>
, e.g go get main
where the file main/main.go
includes the package (from last example above) domain.com:username/private-repo.git
.
回答6:
Generate a github oauth token here and export your github token as an environment variable:
export GITHUB_TOKEN=123
Set git config to use the basic auth url:
git config --global url."https://$GITHUB_TOKEN:x-oauth-basic@github.com/".insteadOf "https://github.com/"
Now you can go get
your private repo.
回答7:
If you've already got git using SSH, this answer by Ammar Bandukwala is a simple workaround:
$ go get
uses git
internally. The following one liners will make git
and consequently $ go get
clone your package via SSH.
Github:
$ git config --global url."git@github.com:".insteadOf "https://github.com/"
BitBucket:
$ git config --global url."git@bitbucket.org:".insteadOf "https://bitbucket.org/"