今天,我启用了Gitlab的2因子验证。之后,由于我登录了Gitlab网站,因此我需要使用手机输入一个6位数字加上密码,这很好,它使我感到安全。
但是,当我使用常规操作(例如git clone some-repo.git
)时,出现错误:
Cloning into 'some-repo'...
remote: HTTP Basic: Access denied
remote: You must use a personal access token with 'api' scope for Git over HTTP.
remote: You can generate one at https://gitlab.com/profile/personal_access_tokens
fatal: Authentication failed for 'some-repo.git'
然后我尝试使用git pull
克隆现有的本地存储库,发生相同的错误。在启用第二因素身份验证之前,上述所有操作都可以正常工作。
按照上述错误的指示,我去了提到的地址:https://gitlab.com/profile/personal_access_tokens。我创建了以下令牌,并保存了令牌的密钥。
但是,我不知道该键如何处理。有人可以告诉我如何使用此键来启用诸如git pull
,git clone
,git push
等基本操作...
在启用第二因素身份验证之前,我在本地有很多存储库。我也希望它们也能工作。
答案 0 :(得分:15)
如using gitlab token to clone without authentication中所述,您可以使用您的个人访问令牌克隆GitLab存储库,如下所示:
git clone https://oauth2:ACCESS_TOKEN@gitlab.com/yourself/yourproject.git
关于如何更新现有克隆以使用GitLab个人访问令牌,您应该在每个本地git目录中编辑.git/config
文件,该文件将具有以下内容:
[remote "origin"]
url = https://yourself@gitlab.com/yourself/yourproject.git
更改url
:
[remote "origin"]
url = https://oauth2:ACCESS_TOKEN@gitlab.com/yourself/yourproject.git
现在,您可以像启用2FA之前一样继续使用此现有git克隆。
答案 1 :(得分:9)
当提示输入凭据时,我使用生成的个人访问令牌作为密码。
这使我可以只使用标准的 Git Clone 语法而无需输入任何其他内容。
生成时,复制令牌。这是克隆时将存储在凭据管理器中的密码。使用它作为你的密码而不是你的 git 密码。
答案 2 :(得分:1)
访问下面的链接,然后输入您的姓名和有效期。
然后单击不同的复选框(例如read_user,read_repository,write_repository等)以访问范围,并创建一个新的Personal Access Token并将其存储在安全的位置
https://gitlab.com/profile/personal_access_tokens
现在,当您执行 git pull,git clone,git push等时,您可以输入用户名/电子邮件作为用户名,并输入新创建的Personal Access Token作为密码
答案 3 :(得分:0)
使用git clone ${CI_REPOSITORY_URL}
使用git clone https://oauth2:${PERSONAL_ACCESS_TOKEN}@gitlab.com/acme/my-project.git
克隆其他存储库。 Gitlab使用“ oauth2” + 令牌约定来填充OAuth2身份验证标头,但是我找不到为此的官方文档。
使用git remote set-url origin ${CI_PROJECT_URL/gitlab.com/oauth2:${PERSONAL_ACCESS_TOKEN}@gitlab.com}.git
这是一个使用git push标记当前仓库的工作:
build_rpms:
stage: package
script:
- echo "Build RPMs. Add tag v1.9d"
- apk add git
- git config --list
# --force is needed for both tag and push to allow job replay
- git tag v1.9d --force
# Enable pushing from CI pipeline:
#
# At that point git origin points to CI_REPOSITORY_URL=
# https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/acme/my-project.git
# This setup does not allow modifications (i.e git push will be rejected).
#
# We use Gitlab Personal Access Token with 'write' access. This token shall
# be generated via Gitlab user settings and then it shall be added as a masked
# environment variable for this project CI settings.
#
# Use "oauth2" as user. For example for CI_PROJECT_URL=https://gitlab.com/acme/my-project
# set origin to https://oauth2:wSHnMvSmYXtTfXtqRMxs@gitlab.com/acme/my-project.git
#
- git remote set-url origin ${CI_PROJECT_URL/gitlab.com/oauth2:${PERSONAL_ACCESS_TOKEN}@gitlab.com}.git
- git remote -v
# Use -o ci.skip option to avoid triggering pipeline again
- git push origin v1.9d --force -o ci.skip
when:
manual