Используйте Octokit или GitHub Rest API для загрузки нескольких файлов

Я пытаюсь написать метод, который берет файлы по пути и загружает их в репозиторий GitHub. Файлы должны оставаться целыми и отдельными (их нельзя заархивировать). Вот что у меня есть на данный момент:

addFiles(branch) {
        const filePath = this.filePath
        fs.readdirSync(filePath).forEach((file, index) => {
            if (file.match('.txt')) {
                const fileData = fs.readFileSync(path.resolve(filePath, file));
                this.octokit.repos.createOrUpdateFile({
                    owner,
                    repo,
                    path: `test/${file}`,
                    branch,
                    message: `Commit ${index}`,
                    content: encode(fileData)
                })
                .catch(err => console.log(err))
            }
        })
    }

Это работает до определенной степени, но загружает только один файл, а затем выдает следующую ошибку:

PUT /path/to/repo/contents/test/example.txt - 201 in 1224ms
PUT /path/to/repo/contents/test/example-2.txt - 409 in 1228ms
{ HttpError: is at 90db2dadca8d061e77ca06fe7196197ada6f6687 but expected b7933883cbed4ff91cc2762e24c183b797db0b74
    at response.text.then.message (/project/node_modules/@octokit/request/dist-node/index.js:66:23)

Даже если бы это сработало нормально, это все равно было бы не идеально, поскольку этот проект, вероятно, будет масштабироваться до точки, когда сотни файлов загружаются одновременно, есть ли способ просто загрузить каталог или загрузить несколько файлов за один коммит? Может ли кто-нибудь решить мою ошибку?

1 ответ

В конце концов, я все понял. createFile это не правильный путь, это нужно делать с createTree: https://octokit.github.io/rest.js/

Это было не так просто, как создать просто дерево, вам также нужно создать фиксацию, а затем обновить ссылку, я следил за этой проблемой GitHub в качестве руководства:

https://github.com/octokit/rest.js/issues/1308

Другие вопросы по тегам