user3785137
user3785137

Reputation: 321

Download a GitLab private repository

I want to use curl to download my private repo in GitLab. I know I can use the Gitlab API, but for some reason, It doesn't work.

Is this possible? When I try to do it this way, it always returns the login page.

Upvotes: 32

Views: 63680

Answers (5)

pdeschen
pdeschen

Reputation: 1379

This is possible, just follow these steps:

  1. First, you have to create a "Personal Access Token":

    1. Go to Your Profile > Settings > Access Tokens.

    2. Enter a name for your "Personal Access Token".

    3. Check "api Access the authenticated user's API"

      Personal Access Tokens

    4. Click "Create personal access token"

    5. The page will reload and save your new token.

    6. Make sure you save the token somewhere safe, you won't be able to view it again.

      New "Personal Access Token"

  2. Now that you have your "Personal Access Token", you need to get your project id to use the API:

    1. Go to https://gitlab.com/api/v4/projects?private_token=XXXXXXXXXXXXXXXXXXXX (replace the Xs with your new token)

    2. Get your project's id from the json.

      Project id

    (alternatively you can just copy Project ID from its web page)

  3. Now you can call:

     wget -O your_project.tar.gz https://gitlab.com/api/v4/projects/0000000/repository/archive?private_token=XXXXXXXXXXXXXXXXXXXX
    

And that'll download your project as a .tar.gz file.

Edit: you can get tarball for specific commit/tag by adding &sha=... parameter to URL, like: https://gitlab.com/api/v4/projects/24470128/repository/archive?private_token=XXXXXXXXXXXXX&sha=606e81c69eff27eccbbc59a0546a9439780dff55

Upvotes: 43

Frak
Frak

Reputation: 865

Provided you have your own "Personal Access Token" (as described in other answers) you can download an archive of your repository's branch by using the curl command:

curl -k --header "PRIVATE-TOKEN: xxxx" https://gitlab.xxxxx/api/v4/projects/<projectID>/repository/archive?sha=630bc911c1c20283d3980dcb95fd5cb75479bb9c -o myFilename.tar.gz

ProjectID is displayed on the repo's main page. You can obtain the SHA value from the webUI after selecting the branch you want from the pull-down and copying the value on the right for the SHA. See screenshot below:

enter image description here

The other way to do this is via wget like this:

wget --no-check-certificate -O myFilename.zip --header=PRIVATE-TOKEN:xxxx "https://gitlab.xxxx/api/v4/projects/<projectID>/repository/archive.zip?sha=630bc911c1c20283d3980dcb95fd5cb75479bb9c"

I hope that helps.

Upvotes: 3

Michael Wyraz
Michael Wyraz

Reputation: 3818

You can use the private token that is yours (found in "profile settings") to access any resource. Just browse to the repository file you want to download, copy the "raw" file link and append ?private_token=...

Example:

curl https://git.local/user1/myrepo/raw/master/myfile.txt?private_token=ahgiretherghaeoi

Upvotes: 13

Waddles
Waddles

Reputation: 197

If you need to do this in a CI run and your private repo is on the same server, you should be able to use git submodules to clone other repos at the same time. Using the ${CI_JOB_TOKEN} is another option since GitLab 8.12.

Upvotes: 2

VonC
VonC

Reputation: 1323793

You can, but you need to authenticate yourself (as in "Gitlab API: How to generate the private token")

curl http://gitlab.server/api/v3/session --data 'login=myUser&password=myPass'

Then with the private token:

curl --header "PRIVATE-TOKEN: QVy1PB7sTxfy4pqfZM1U" "http://example.com/api/v3/projects"

Or, in your case, get the repository files:

GET /projects/:id/repository/files

Or, download directly one file.

Upvotes: 6

Related Questions