Gitlab 为新贡献者(API)将项目分成组

Gitlab 为新贡献者(API)将项目分成组,gitlab,git-fork,gitlab-api,curl,jq,Gitlab,Git Fork,Gitlab Api,Curl,Jq,对于我正在考虑的更好的方法的可能性,我想首先解释我的需求(问题在分隔线之后开始) 鉴于我拥有以下GitLab组结构: - main-group - sub-group-project-templates - project-template-1 - sub-group-projects 在主组/子组项目模板中,有多个项目作为任务的启动项目。 如果有人想做这样的任务,我希望在小组子小组项目中有相应项目模板的分支(例如project-template-1),并将该人员的姓名作为项目

对于我正在考虑的更好的方法的可能性,我想首先解释我的需求(问题在分隔线之后开始)

鉴于我拥有以下GitLab组结构:

- main-group
  - sub-group-project-templates
    - project-template-1
  - sub-group-projects
在主组/子组项目模板中,有多个项目作为任务的启动项目。 如果有人想做这样的任务,我希望在小组
子小组项目中有相应项目模板的分支(例如
project-template-1
),并将该人员的姓名作为项目名称

如果此人的名字是John Doe,他想开始
project-template-1
的任务,那么应该有一个新的项目
main group/sub group projects/John Doe\u project-template-1

John Doe应该只能查看(读/写)存储库
John Doe\u project-template-1
,而不能查看项目的其余部分(其他分叉,…)


我的解决方案是将模板项目交给子组,然后添加一个新的贡献者

但我在第一步就已经失败了(用一个新名称将项目分成子组)

我的第一个镜头是:

POST http://gitlab.com/api/v4/projects/project_id/fork
但是我不知道如何定义目标目录和设置新fork的名称。 以下操作不起作用:

POST http://gitlab.com/api/v4/projects/project_id/fork?namespace=main-group%2Fsub-group-projects%2Fjohn_doe_project-template-1
“消息”:“未找到404目标命名空间”


这样的事情是可能的,或者我如何实现这一点?

假设您在子组
子组项目模板
中使用project
project-template-1
进行以下配置:

它可以在多个API请求中完成,但以下功能仍有一些工作正在进行中:

  • (一)
  • (二)
但这两个问题都有解决办法,例如只执行一个附加请求来获取名称空间id(1),并在分叉后执行一个编辑项目请求(2)

步骤如下:

  • 对于子组
    子组项目
  • 主组/子组项目模板/project-template-1
    到id为的命名空间
    $namespace\u id
    &获取所创建项目的项目id
  • id
    $project\u id
    project-template-1
    到:
    johndoe\u project-template-1
  • 对于用户johndoe
  • 对于项目
    johndoe_项目模板-1
    :添加id为
    $user_id的用户
请注意,要添加成员,您需要用户id,我假设您希望在第4步中搜索该id,但如果您已经拥有该id,则可能不需要此步骤

下面是一个执行所有这些步骤的bash脚本,它使用&:

#/bin/bash
set-e
gitlab_host=gitlab.your.host
访问令牌=您的访问令牌
用户名=johndoe
项目=项目模板-1
用户访问权限=30
组=主组
namespace\u src=子组项目模板
namespace\u dest=子组项目
新建项目名称=${username}{${project}
project\u src=$group/$namespace\u src/$project
编码的项目=$(echo$project\u src|sed's/\/%2F/g')
echo“1-获取$namespace\u dest的命名空间id”
#https://docs.gitlab.com/ce/api/namespaces.html
namespace_id=$(curl-s“https://$gitlab_host/api/v4/namespace?search=$namespace_dest”\
-H“私有令牌:$access_-Token”| jq-r.[0].id')
echo“2-将项目$project\u src分叉到id为$namespace\u id的命名空间”
#https://docs.gitlab.com/ce/api/projects.html#fork-计划
project_id=$(curl-s-X POST“https://$gitlab_host/api/v4/projects/$encoded_project/fork?namespace=$namespace_id”\
-H“私有令牌:$access_-Token”| jq.id')
如果[-z$project_id];然后
echo“fork失败”
出口1
fi
echo“3-将id为$project\U id的项目从$project重命名为:$new\U project\U name”
#https://docs.gitlab.com/ce/api/projects.html#edit-计划
curl-s-X PUT“https://$gitlab\u host/api/v4/projects/$project\u id”\
-H“内容类型:应用程序/json”\
-d“{\”路径\“:\”$new\u项目名称\“,\”名称\“:\”$new\u项目名称\“}”\
-H“私有令牌:$access\u Token”>/dev/null
echo“4-获取:$username的用户id”
#https://docs.gitlab.com/ce/api/users.html
user_id=$(curl-s“https://$gitlab_host/api/v4/users?username=johndoe”\
-H“专用令牌:$access_Token”|\
jq-r.[]|选择(.name==“johndoe”)|.id')
echo“5-编辑项目成员:添加id为$user\u id的用户”
#https://docs.gitlab.com/ce/api/members.html#add-成员到小组或项目
curl-s“https://$gitlab\u host/api/v4/projects/$project\u id/members”\
-H“专用令牌:$access\u令牌”\
-d“user\u id=$user\u id&access\u level=$user\u access”>/dev/null
在第二步(fork项目)中,项目源名称空间是URL编码的,因此您可能希望使用适当的方式对其进行编码(在这种情况下,我们只需将
/
替换为
%2F