gitlab上有很多代码仓库,而且代码仓库都分了组,一个一个克隆代码仓库简直要让人崩溃,所以写了一个工具批量克隆和更新代码仓库,由于只会java,所以这里使用了java编写。
gitlab提供了在线和私有化部署两种服务方式,它们共同遵循同一套restful api 规范:https://docs.gitlab.com/ee/api/rest/ ,从文档中可以看到有多种接入方式,想要访问私有仓库,则需要加上请求头:
curl --header "Authorization: Bearer OAUTH-TOKEN" "https://gitlab.example.com/api/v4/projects"
其中/api/v4
是公共前缀,所有的接口请求都要使用它作为前缀。
一、gitlab文档接口
这里一共使用到了三个接口:
1. /api/v4/groups/:id
接口文档:https://docs.gitlab.com/ee/api/groups.html#details-of-a-group
该接口会查询某个group的详情信息,这里:id可以传groupName,请求该接口是为了获取其groupId。
2. /api/v4/groups/: groupId/subgroups
接口文档:https://docs.gitlab.com/ee/api/groups.html#list-a-groups-subgroups
该接口用于查询某个group下的所有子group
3./api/v4/groups/:groupId/projects
接口文档:https://docs.gitlab.com/ee/api/groups.html#list-a-groups-projects
该接口用于查询某个group下的所有项目列表
有了上述三个接口,便可以根据输入参数:groupName 递归查询该group下的所有字group,并查询子group下的所有项目列表。
二、实现
1.获取token
2.代码实现
代码已经上传到了gitee:https://gitee.com/kdyzm/code-backup
在运行之前先修改application.properties
文件
gitlab.baseUrl=
gitlab.token=
#多个groupName使用英文逗号分割
gitlab.groups=
gitlab.targetDir=D:\\git_repository\\data
修改完了以后运行mvn clean package
命令打包,最后使用命令 java -jar code-backup-1.0-SNAPSHOT.jar
运行jar包:
可以重复运行jar包,当检测到项目存在的时候会更新项目。
END.
注意:本文归作者所有,未经作者允许,不得转载