【问题标题】:How to commit files larger than 1mb to GitHub using the GitHub API and Octokit JavaScript如何使用 GitHub API 和 Octokit JavaScript 将大于 1mb 的文件提交到 GitHub
【发布时间】:2019-08-28 02:57:19
【问题描述】:

我需要从客户端浏览器应用程序中运行的 JavaScript 更新 GitHub 上的文件。该文件可能大于 1mb,因此我无法使用 octokit createFile() 函数,该函数仅限于小于 1mb 的文件。

我有一个通过 oauth 认证的用户、一个文件以及该文件最终需要进入的存储库。基本上我有:

this.octokit = new Octokit();
this.octokit.authenticate({
    type: "oauth",
    token: github.access_token
})
this.file = "some text in a string thing";
this.octokit.repos.getContents({
    owner: this.currentUser,
    repo: this.currentRepoName,
    path: path
}).then(thisRepo => {

我需要弄清楚如何将 this.file 的内容放入该 repo 根文件夹中的 project.stl 文件中。

我找到了这个出色的blog post,其中描述了使用 octokit 库的 ruby​​ 版本的过程是如何工作的。我对 ruby​​ 没有任何经验,因此了解那里发生的事情需要一些时间。这似乎是一个足够普遍的问题,应该有一个 JavaScript 解决方案的例子。我希望任何人都可以提供将文件从 JavaScript 上传到 GitHub 的任何帮助,如果我可以开始工作以作为示例,我将发布我的解决方案。

【问题讨论】:

    标签: javascript github-api


    【解决方案1】:

    编辑:我重写了它的工作原理,我认为这样更好:

    async createCommit (octokit, { owner, repo, base, changes }) { 让回应;

      if (!base) {
        response = await octokit.repos.get({ owner, repo })
        base = response.data.default_branch
      }
    
      response = await octokit.repos.listCommits({
        owner,
        repo,
        sha: base,
        per_page: 1
      })
      let latestCommitSha = response.data[0].sha
      const treeSha = response.data[0].commit.tree.sha
    
      response = await octokit.git.createTree({
        owner,
        repo,
        base_tree: treeSha,
        tree: Object.keys(changes.files).map(path => {
          return {
            path,
            mode: '100644',
            content: changes.files[path]
          }
        })
      })
      const newTreeSha = response.data.sha
    
      response = await octokit.git.createCommit({
        owner,
        repo,
        message: changes.commit,
        tree: newTreeSha,
        parents: [latestCommitSha]
      })
      latestCommitSha = response.data.sha
    
      await octokit.git.updateRef({
        owner,
        repo,
        sha: latestCommitSha,
        ref: `heads/master`,
        force: true
      })
    
      console.log("Project saved");
    
    }
    

    【讨论】:

    猜你喜欢
    • 2017-12-15
    • 2013-11-11
    • 1970-01-01
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    相关资源
    最近更新 更多