我设法将整个过程分为三个步骤:
- 创建新项目。
- 从现有项目存储库中获取所需文件。
- 将文件上传到新的项目存储库。
由于问题与技术无关,因此我将发布一些 JavaScript/Vue.js 风格的伪代码,为读者提供一般概述。
这是一个负责调用 Gitlab API 的函数:
async callGitLabProjects(url, method, payload, format) {
const token = this.$store.getters.token
let headers
if (format === "text") {
headers = {
'Private-Token': token
}
}
else {
headers = {
'Content-Type': 'application/json',
'Private-Token': token
}
}
const response = await fetch(url, {
method: method,
headers: headers,
body: JSON.stringify(payload)
})
return response.json()
}
可以通过调用 Gitlab API 来创建新项目,使用以下负载和指令:
const payload = {
"name": "newProjectName",
"namespace_id": 10,
"description": "Description"
}
let newRepoUrl = ""
await this.callGitLabProjects("https://gitlab.expl.com/api/v4/projects/", "POST", payload, "json")
.then(data => {
newRepoUrl += data._links.self
}
.catch((e) => {
console.error(e)
})
如您所见,新的存储库 URL 已保存以供将来使用。
在第 2 步中,我们获取要导入的原始文件(请记住对文件名进行 URL 编码):
let rawFile = await this.callGitLabProjects("https://gitlab.expl.com/api/v4/projects/10705/repository/files/my%2Dfile%2Emd/raw?ref=master", "GET", "", "text")
获取后,您可以简单地将其上传到新项目的存储库:
const filePayload = {
"branch": "master",
"content": rawFile,
"commit_message": "Initial file uploaded"
}
this.callGitLabProjects(newRepoUrl + "/repository/files/my%2Dfile%2Emd", "POST", filePayload, "json")
.catch((e) => {
console.log(e)
})