gitlab api 以 root 身份 fork 项目

gitlab api fork projects as root

我使用 gitlab-api 和 Python 以 root 身份登录。在服务器上,我有一个 git 存储库,其中包含我的模板(示例)代码。然而,此模板代码不在 Adminstrator 下,而是在我自己的命名空间 (teacher/template) 下。我想将此模板项目作为一项作业分发给 25 名学生,即将此模板分配给另外 25 个项目,但在不同的 namespace/group 中,例如 StudentsGroup/assignment1、StudentsGroup/assignment2... 等等。

谁能告诉我实现它的最佳方法是什么?

在 gitlab api 中,我看到了两种可能性:

第一个选项:

管理员分叉关系

允许修改现有项目之间的分叉关系。仅对管理员可用。 在现有项目之间创建分叉 from/to 关系。

POST/项目/:id/fork/:forked_from_id

参数:

id (required) - The ID of the project
forked_from_id: (required) - The ID of the project that was forked from

第二个选项:

分支项目

将项目分叉到经过身份验证的用户的用户命名空间中。

POST /projects/fork/:id

参数:

id (required) - The ID of the project to be forked

如果你有 gitlab-admin 权限,第一个选项是目前唯一的方法。

但是向第二个选项添加 namespace_id 参数时存在问题 (https://gitlab.com/gitlab-org/gitlab-ce/issues/21591) and a merge request (https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/6213)。如果我们幸运的话,下一个 gitlab 版本(8.12)将添加此功能(gitlab 通常每个月 22 日发布)。

截至 2015 年 9 月 6 日,没有可用的解决方案。所以,我找到了解决方法。

  1. 克隆 Teacher/template.git 到本地磁盘。

开始 for 循环:

  1. Create empty Students/jobs_{count}.git in using the normal create project API

  2. 在本地磁盘中,在脚本文件中不断更改远程源,如git remote set-url origin git@server:Students/jobs_{count}.git

  3. 推送文件git推送origin master

for 循环结束

如果有人对该脚本感兴趣,您可以 ping 我或稍后在删除凭据后上传它。