gitlab通过命令行获取特定分支的tar

时间:2014-03-27 14:49:16

标签: git command-line gitlab

我正在使用gitlab。当我进入界面时,在每个分支上我都可以下载源代码作为zip,tar或者任何东西。

我正在制作rpm规范文件,我需要使用命令行下载tar球。因为我添加了我的rsa密钥,我可以毫无问题地执行git clone:

git clone http://gitlab/group/project.git
Cloning into 'project'...
remote: Counting objects: 1885, done.
remote: Compressing objects: 100% (826/826), done.
remote: Total 1885 (delta 1194), reused 1496 (delta 954)
Receiving objects: 100% (1885/1885), 1.30 MiB | 0 bytes/s, done.
Resolving deltas: 100% (1194/1194), done.
Checking connectivity... done

无论如何做

wget http://gitlab/group/project/repository/archive.zip

告诉我这些错误:

Resolving gitlab (gitlab)... 10.1.253.75
Connecting to gitlab (gitlab)|10.1.253.75|:80... connected.
HTTP request sent, awaiting response... 401 Unauthorized
Authorization failed.

5 个答案:

答案 0 :(得分:5)

GitLab 6.2issue 5253以来,它应该是:

GET /projects/:id/repository/archive

但这似乎仅供内部使用,因为您无法将项目的ID知道为用户(仅限其名称)。

请忘记,shown in ability.rb,下载档案与权限相关联。确保你有#34; download_code"为您的项目设置的权限。

在这里,它必须是权限问题,因为,例如:

wget http://demo.gitlab.com/gitlab/gitlab-recipes/repository/archive.zip

这很好用,并且没有任何问题地获得该项目的内容。


然而,正如OP Chris Maes commentsissue 6645中提到的那样,如app/models/ability.rb所示:

 if project && project.public?

...那" dowload_code"对于公共项目,功能仅

答案 1 :(得分:4)

试试这个

curl http://$yourhost:$port/$yourgroup/$yourrepo/repository/archive.zip\?ref\=$yourbranch\&\private_token\=$yourtoken -o newpackage.zip

答案 2 :(得分:4)

对我而言,private_tokensharef参数无法协同工作。所以,我改变了方式,并通过Gitlab API的头参数告诉我的私人令牌,如下所示:

wget http://{{your_host}}/api/v3/projects/{{project_id}}/repository/archive?sha={{commit_sha}} --header='PRIVATE-TOKEN: {{private_token}}'

答案 3 :(得分:0)

使用较新版本的 gitlab,您可以使用

curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.com/api/v4/projects/<project_id>/repository/archive?sha=<commit_sha>"

您还可以传递不同的存档格式,例如 tar.bz2

curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.com/api/v4/projects/<project_id>/repository/archive.tar.bz2?sha=<commit_sha>"

答案 4 :(得分:-1)

我不想先获取项目ID,而是使用类似于Github HTTP API的group | org和存储库名称。这对我来说适用于11.9.0-ce.0

私人/内部项目

curl "https://gitlab.yourdomain.com/api/v4/projects/engineering%2Faccount-service/repository/archive?sha=some-branch-name" \
  -H "Private-Token: $GITLAB_TOKEN" \
  -o /tmp/account-service-branch-name.tar.gz

公共项目

curl "https://gitlab.yourdomain.com/engineering/account-service/repository/archive.tar.gz?ref=some-branch-name" \
  -o /tmp/account-service-branch-name.tar.gz

在此示例中

  • “组”为engineering
  • “存储库”为account-service

不要忘记%2Fgroup之间的repo

希望它对任何人都有帮助