Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

I want to clone GitLab repository without prompt for my automation script, by using my private token from my GitLab account.

Can someone provide me a sample?

I know I can do so with user and password:

git clone https://" + user + ":" + password + "@" + gitlaburl;

and I know it is possible with ssh key

But, both options are insufficient.

for me the usefull syntax was: https://$GIT_USERNAME:$GITLAB_PERSONAL_ACCESS_TOKEN@gitlaburl – user1767316 May 20, 2021 at 12:58 It works! I wonder why on gitlab.com on project details they don't give the complete command syntax :-(( – FRa Feb 28, 2018 at 17:16

I tested only the Personal Access Token using GitLab Community Edition 10.1.2, the example:

git clone https://gitlab-ci-token:${Personal Access Tokens}@gitlab.com/username/myrepo.git
git clone https://oauth2:${Personal Access Tokens}@gitlab.com/username/myrepo.git

or using username and password:

git clone https://${username}:${password}@gitlab.com/username/myrepo.git

or by input your password:

git clone https://${username}@gitlab.com/username/myrepo.git

But the private token seems can not work.

Note that private tokens were removed in favour of personal access tokens in GitLab 10.2: about.gitlab.com/2017/09/22/gitlab-10-0-released/… – David Planella Nov 11, 2018 at 6:05 And about user+password+token? How to express all in one URL? Now my gitlab-software server use all, login and two-factor (or token). – Peter Krauss Jan 6, 2021 at 22:53 what are the differences for gitlab-ci-token, oauth2 and x-access-token? all of these 3 work for me. – Lei Yang Apr 20, 2022 at 6:44

Use the token instead of the password (the token needs to have "api" scope for clone to be allowed):

git clone https://username:token@gitlab.com/user/repo.git

Tested against 11.0.0-ee.

For people Googling this: this is what you want if using Personal Access Tokens over HTTPS on gitlab.com. – Adam Baxter Aug 10, 2019 at 13:50 Isn't it amazing that we have to find this here and not on the GitLab Docs page on Personal Access Tokens? – cryanbhu Feb 14, 2021 at 5:54 <private token> needs to be replaced with the CI runner's token, not the account's private token. – Kip Jun 2, 2016 at 15:08 You can use the project specific ci token (enable builds, then go to the project/runners config). – BM5k Jul 26, 2016 at 19:10

If you already has a repository and just changed the way you do authentication to MFA, u can change your remote origin HTTP URI to use your new api token as follows:

git remote set-url origin https://oauth2:TOKEN@ANY_GIT_PROVIDER_DOMAIN/YOUR_PROJECT/YOUR_REPO.git

And you wont need to re-clone the repository at all.

git clone https://oauth2:TOKEN@ANY_GIT_PROVIDER_DOMAIN/YOUR_PROJECT/YOUR_REPO.git also worked for me, thank you!! I will Answer this thread with my correct solution. – Rutrus Nov 8, 2018 at 11:54

You can use the runners token for CI/CD Pipelines of your GitLab repo.

git clone https://gitlab-ci-token:<runners token>@git.example.com/myuser/myrepo.git

Where <runners token> can be obtained from:

git.example.com/myuser/myrepo/pipelines/settings

or by clicking on the Settings icon -> CI/CD Pipeline and look for Runners Token on the page

Screenshot of the runners token location: Doesn't work from inside GitLab CI pipeline. But this line works: git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/... – Slawa Aug 30, 2018 at 13:47

Many answers above are close, but they get ~username syntax for deploy tokens incorrect. There are other types of tokens, but the deploy token is what gitlab offers (circa 2020+ at least) per repo to allow customized access, including read-only.

From a repository (or group), find the settings --> repository --> deploy tokens. Create a new one. A username and token field are created. The username is NOT a fixed value by default; it's unique to this token.

git clone https://<your_deploy_token_username>:<the_token>@gitlab.com/your/repo/path.git

Tested on gitlab.com public, free account.

One possible way is using a deploy token (https://docs.gitlab.com/ee/user/project/deploy_tokens). After creating the token, use:

git clone https://<username>:<deploy_token>@gitlab.example.com/tanuki/awesome_project.git 

as mentioned in the link above.

Neither does this seem to be working with npm install on a fresh docker container, defaults to ssh. – Vix Apr 17, 2019 at 10:57

Inside a GitLab CI pipeline the CI_JOB_TOKEN environment variable works for me:

git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/...

Source: Gitlab Docs

BTW, setting this variable in .gitlab-ci.yml helps to debug errors.

variables:
    CI_DEBUG_TRACE: "true"

As of 8.12, cloning using HTTPS + runner token is not supported anymore, as mentioned here:

In 8.12 we improved build permissions. Being able to clone project using runners token it is no supported from now on (it was actually working by coincidence and was never a fully fledged feature, so we changed that in 8.12). You should use build token instead.

This is widely documented here - https://docs.gitlab.com/ce/user/project/new_ci_build_permissions_model.html.

It isn't possible using runners tokens but is using personal access tokens. Please see my answer: stackoverflow.com/questions/25409700/… – Muhan Alim Nov 17, 2017 at 9:42 @MuhanAlim I'd recommend no one to expose their whole account using access tokens. That's why they are called Private Access Tokens! – Yan Foto Nov 17, 2017 at 11:09 The question doesn't mention anything about making the key public, only how to use the key in place of a username and password for cloning. But that it is a good point, I would not recommend anyone use the keys anywhere that is public. – Muhan Alim Nov 17, 2017 at 11:45 automation script implies that the whole procedure is not running locally. Probably somewhere where others also have access to. – Yan Foto Nov 17, 2017 at 15:19

Which will expand to something like:

git clone https://gitlab-ci-token:[MASKED]@gitlab.com/gitlab-examples/ci-debug-trace.git

Where the "token" password is ephemeral token (it will be automatically revoked after a build is complete).

How does it know the repository URL that you want? Seems like this would only work in CI/CD for the current repo. – Peter Kionga-Kamau Feb 15 at 21:00

In my case, I just provided the token instead the password (second input field).

I pushed a local repo for the first time from the command line.

From the scratch, these are the commands I entered (remember to move inside the repo's folder first).

$ git init
$ git status
$ git add .
$ git status
$ git commit -m 'Shinra Tensei.'
$ git push --set-upstream https://gitlab.com/userName/my-repo.git master

Then, the pop-up message you can see in the picture comes up. Provided USERNAME and TOKEN.

To make my future me happy: RTFM - don't use the gitlab-ci-token at all, but the .netrc file.

There are a couple of important points:

  • echo -e "machine gitlab.com\nlogin gitlab-ci-token\npassword ${CI_JOB_TOKEN}" > ~/.netrc
  • Don't forget to replace "gitlab.com" by your URL!
  • Don't try to be smart and create the .netrc file directly - gitlab will not replace the $CI_JOB_TOKEN within the file!
  • Use https://gitlab.com/whatever/foobar.com - not ssh://git@foobar, not git+ssh://, not git+https://. You also don't need any CI-TOKEN stuff in the URL.
  • Make sure you can git clone [url from step 4]
  • Background: I got

    fatal: could not read Username for 'https://gitlab.mycompany.com': No such device or address
    

    when I tried to make Ansible + Gitlab + Docker work as I imagine it. Now it works.

    Add this on before script step

    before_script:
      - git config --global credential.helper store
      - echo "https://gitlab-ci-token:${CI_JOB_TOKEN}@${CI_SERVER_HOST}" >> ~/.git-credentials
      - chmod 600 ~/.git-credentials
    

    Thanks

    Customising the URL is not needed. Just use a git configuration for gitlab tokens such as

    git config --global gitlab.accesstoken {TOKEN_VALUE}
    

    extended description here

    This did not work for me and I also couldn't find documentation anywhere on a config option with this name – mark.monteiro Nov 3, 2020 at 0:02 Have you read the article in the link? This variable is what gitlab will take from your git client to authenticate and you need a personal access token. – Bizmate Nov 3, 2020 at 1:00 I did read the linked article. gitlab.accesstoken does not do anything and there is no documentation anywhere on GitLab referencing it – mark.monteiro Nov 3, 2020 at 15:40

    Thanks for contributing an answer to Stack Overflow!

    • Please be sure to answer the question. Provide details and share your research!

    But avoid

    • Asking for help, clarification, or responding to other answers.
    • Making statements based on opinion; back them up with references or personal experience.

    To learn more, see our tips on writing great answers.