使用 API 方式將 GitHub Repo 匯入 GitLab
想要將 GitHub 特定的 Repo 批次匯入本地端的 GitLab, 所以了解一下 GitHub 與 GitLab 現有的 API, 應該可以達成這個需求
在 GitLab 建立 Group
- 需要先在
- GitLab 申請一個有建立 Group 權限的 access token Exp. QMi2xxxxxxxxxxxx-oaQ
- 要建立 Group name Exp. iii-org-app
- 使用 GitLab API - New group
POST /groups
- curl 呼叫語法:
curl -H "Content-Type: application/json" -H "PRIVATE-TOKEN: QMi2xxxxxxxxxxxx-oaQ" -X POST -d '{"name": "iii-org-app","path": "iii-org-app"}' https://gitlab.iiidevops.org/api/v4/groups/
- 如果成功會回覆類似以下的訊息
{ "id":17, "web_url":"http://gitlab.iiidevops.org/groups/iii-org-app", "name":"iii-org-app", "path":"iii-org-app", "description":"", "visibility":"private", : "full_name":"iii-org-app", "full_path":"iii-org-app", "created_at":"2021-02-18T12:51:00.821Z", "parent_id":null, "projects":[], "shared_projects":[] }
找出 GitHub 預計匯入的 Repo_ID
- Exp. 要將 GitHub 上 iii-org-app 的所有 Repo 都匯入 GitLab, 先列出 iii-org-app 的所有 Repo 清單
- 使用 GitHub API - List organization repositories
GET /orgs/{org}/repos
- curl 呼叫語法:
curl -H "Accept: application/vnd.github.inertia-preview+json" https://api.github.com/orgs/iii-org-app/repos
- 預計每個 Repo 需要的資料項目
"id": 336984846, "name": "django-postgresql-todo", "description": "Python+django+postgresql 的 TODO 範例", "created_at": "2021-02-08T06:46:41Z", "updated_at": "2021-02-08T06:47:14Z", "pushed_at": "2021-02-08T06:50:46Z"
匯入 GitLab
- 需要先在
- GitLab 申請一個有匯入 repo 權限的 access token Exp. QMi2xxxxxxxxxxxx-oaQ
- GitHub 申請一個可讀取 repo 的 access token Exp. de8b68cxxxxxxxxxx3a9
- 取得 GitHub 上的 Repo
- id Exp. 336984846
- name Exp. django-postgresql-todo
- 匯入 GitLab 的 Group Exp. iii-org-app
- 使用 GitLab API - Import repository from GitHub
POST /import/github
- curl 呼叫語法:
curl --request POST --header "PRIVATE-TOKEN: QMi2xxxxxxxxxxxx-oaQ" \ --data "personal_access_token=de8b68cxxxxxxxxxx3a9&repo_id=336984846&new_name=django-postgresql-todo&target_namespace=iii-org-app" \ https://gitlab.iiidevops.org/api/v4/import/github
- 如果成功會回覆類似以下的訊息
{"id":13,"name":"django-postgresql-todo","full_path":"/iii-org-app/django-postgresql-todo","full_name":"iii-org-app / django-postgresql-todo"}