使用isomorphic-git从浏览器向GitHub进行git push操作

请简述一下。

根据 isomorphic-git 的 README,由于 GitHub 不允许从浏览器中使用 git push,因此无法通过浏览器进行 git push。但通过服务器绕过了 cors 的限制,成功实现了 git push。

做法 (yà fǎ)

    • cors-buster を使って無理矢理 cors を迂回する https://cors-buster-tbgktfqyku.now.sh/

git プロトコルではなく https を使う

将 GitHub 上的 https 地址通过 cors-buster 远程注册。

这样的感觉

[core]
  repositoryformatversion = 0
  filemode = true
  bare = false
  logallrefupdates = true
  ignorecase = true
  precomposeunicode = true
[remote "origin"]
  url = https://github.com/mizchi-sandbox/igit-playground.git
  fetch = +refs/heads/*:refs/remotes/origin/*

[remote "origin-proxied"]
  url = https://cors-buster-tbgktfqyku.now.sh/github.com/mizchi-sandbox/igit-playground
  fetch = +refs/heads/*:refs/remotes/origin/*

原始的是平时的。经过代理的是这次要使用的URL。

const git = require("isomorphic-git");
const path = require("path");
const fs = require("fs");

const repo = {
  dir: ".",
  fs
};

const main = async () => {
  console.log("start");
  let pushResponse = await git.push({
    ...repo,
    remote: "origin-proxied",
    ref: "master",
    authUsername: process.env.GITHUB_TOKEN,
    authPassword: process.env.GITHUB_TOKEN
  });
  console.log(pushResponse);
  console.log("done");
};

main();

获取GitHub的个人访问令牌。可通过搜索引擎获得,略去具体步骤。

提供 GITHUB_TOKEN 并运行

> ~/s/igit-playground on master  env GITHUB_TOKEN=<your-toke> node main.js
start
{ ok: [ 'unpack', 'refs/heads/master' ] }
done

完成了。

这里的实际推送的存储库是 https://github.com/mizchi-sandbox/igit-playground