Gitlab是一种免费的,开源的方式来托管私有的.git
存储库,但它似乎不适用于GoLang。创建项目时,它会生成以下格式的URL:
git@1.2.3.4:private-developers/project.git
其中:
1.2.3.4
是gitlab服务器的IP地址private-developers
是可以访问私人仓库的用户组Golang 1.2.1似乎并不理解这种语法。
go get git@1.2.3.4:private-developers/project.git
结果:
package git@23.251.148.129/project.git: unrecognized import path "git@1.2.3.4/project.git"
有没有办法让它发挥作用?
答案 0 :(得分:32)
运行此命令:
git config --global url."git@1.2.3.4:".insteadOf "https://1.2.3.4/"
假设您拥有git clone
存储库的正确权限,这将使go get
适用于服务器1.2.3.4
上的所有存储。
我使用版本1.6.2,1.8和1.9.1进行了测试。
答案 1 :(得分:10)
此问题现已在Gitlab 8中解决。*但仍然不直观。确实最困难的挑战是go get
,以下步骤将帮助您克服这些挑战:
创建SSH密钥对。请务必不要覆盖~/.ssh/
中默认保存的现有对。
ssh-keygen -t rsa -b 4096
在Gitlab项目中创建一个新的秘密变量。使用SSH_PRIVATE_KEY
作为密钥,将私有密钥的内容用作值。
使用.gitlab-ci.yml
修改before_script
。
before_script:
# install ssh-agent if not already installed
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
# run ssh-agent
- eval $(ssh-agent -s)
# add the SSH key stored in SSH_PRIVATE_KEY
- ssh-add <(echo "$SSH_PRIVATE_KEY")
# for Docker builds disable host key checking
- mkdir -p ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
在您需要go get
的项目中,将步骤1中创建的密钥对中的 public 密钥添加为 Deploy Key 。< / p>
答案 2 :(得分:7)
如果go get
无法获取回购,您可以随时直接使用git进行初始克隆:
git clone git@gitlab:private-developers/project.git $GOPATH/src/gitlab/private-developers/project
这些工具将正常工作,期望go get -u
需要-f
标志,因为git remote与规范导入路径不匹配。
答案 3 :(得分:4)
使用Gitlab的最简单方法
before_script:
- git config --global url."https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/".insteadOf https://gitlab.com/
- go env -w GOPRIVATE=gitlab.com/${CI_PROJECT_NAMESPACE}
在此处查看更多详细信息:https://docs.gitlab.com/ee/user/project/new_ci_build_permissions_model.html#dependent-repositories
答案 4 :(得分:2)
Gitlab本身支持go get
。
go get
会向您提供的网址发出http请求,并查找指向确切源控制路径的元标记。
对于我的gitlab安装,这是mygitlabdomain.com/myProject/myRepo
。对你而言,我认为这将是1.2.3.4/private-developers/project
。
不幸的是,它似乎只提供了http scm路径,而不是ssh路径,因此我必须输入我的凭据才能克隆。如果要更新为ssh url,则可以在克隆后轻松摆弄本地存储库中的遥控器。
您可以通过戳http://1.2.3.4:private-developers/project?go-get=1
并查看来源并查找元标记来测试网址。
答案 5 :(得分:2)
GitLab 11.8+版和Go 1.13+版将通过使用您的GitLab个人令牌与BASIC auth一起使用。 转到Gitlab中的“设置”->“访问令牌”,添加个人访问令牌或使用现有的令牌。 在〜/ .netrc文件中,添加以下行:
machine <your GitLab domain> (e.g. gitlab.com)
login <your GitLab id>
password <your GitLab personal access token>
那么您应该可以本地获取。
如果需要在CI中进行构建,请在.gitlab-ci.yml文件中添加以下行:
before_script:
- echo -e "machine <your GitLab domain>\nlogin gitlab-ci-token\npassword ${CI_JOB_TOKEN}" > ~/.netrc
答案 6 :(得分:1)
对于记录,这可以在gitlab 7.3.2之外使用,并且正如JimB所观察到的,可以用作解决方法。我发现即使用gitlab注册了SSH密钥,我也会收到提示输入用户名/密码的信息:
git clone http://1.2.3.4/private-developers/project.git
或者我可以使用SSH等价物,因为我有一个用gitlab注册的SSH密钥,避免提示:
git clone git@1.2.3.4:private-developers/project.git
目前无法使用go。修复可能在7.9但我没有机会测试它: upcoming bugfix
答案 7 :(得分:1)
我通常的做法是:
确保您正在使用SSH。
完成后,您可以将git配置为使用ssh
代替https
如果使用的是Mac OX。你可以运行vim〜/ .gitconfig 并添加
[url "git@gitlab.com:"]
insteadOf = https://gitlab.com/
配置完成后即可运行
GOPRIVATE="gitlab.com/your_username_or_group" go get gitlab.com/name_or_group/repo_name
我希望有帮助。
答案 8 :(得分:0)
您可以设置您的git凭据,Go将使用它们:
git config credential.helper store
echo https://your-github-username:your-generated-password@github.com >> ~/.git-credentials
答案 9 :(得分:0)
对于HTTPS私有gitlab存储库,@ Rick Smith就足够了。这是对HTTP存储库的补偿,首先运行命令:
git config --global url."git@mygitlab.com:".insteadOf "http://mygitlab.com/"
然后使用下面的go get
命令来获取golang项目:
go get -v -insecure mygitlab.com/user/repo
答案 10 :(得分:0)
从dep 5.2版开始,dep
支持Gitlab私有存储库的私有存储库。
在.netrc文件上,您可以提供Gitlab用户名和访问令牌以访问私有存储库。
.netrc
文件$ touch $HOME/.netrc
.netrc
machine gitlab.<private>.com
login <gitlab-username>
password <gitlab-access-token>
... (more private repositories if needed)
dep
命令来解析私有软件包。在这种情况下,$ dep ensure -v