我正在使用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.
答案 0 :(得分:5)
自GitLab 6.2和issue 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 comments和issue 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_token
和sha
或ref
参数无法协同工作。所以,我改变了方式,并通过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
不要忘记%2F
和group
之间的repo
希望它对任何人都有帮助