2021年7月8日更新
同様の問題に直面しています。GitHubと統合できるWebアプリに取り組んでいます。アプリのフローでは、ユーザーはGitHubリポジトリへのリンクを追加してから、ファイルをコミットしてリモートのGitHubリポジトリにプッシュできます。これにはGitHubv3APIを使用します。
問題はファイルをコミットすることです。リクエストのチェーンを作成する必要があります。
- リポジトリから既存のファイルツリーを取得します
GET https://api.github.com/repos/USER/REPO/git/commits/COMMIT_SHA
- 新しいファイルツリーを作成する
- コミットを作成する
ステップ1では、リポジトリが完全に空の場合に存在しないコミットのshaを知る必要があります。
リポジトリが空で、ファイルが含まれていない場合は、次のようにファイルを追加できます(このAPIを使用すると、commitのshaなしでファイルを追加できます)。
PUT https://api.github.com/repos/USER/REPO/contents/YOUR_FILE_NAME
{
"branch": "BRANCH_NAME",
"message": "COMMIT_MESSAGE",
"content": "ENCODED_FILE_CONTENT"
}
btoa
ENCODED_FILE_CONTENTは、次のようにJS関数で取得できます。
var encodedFileContent = btoa(fileString);
たとえば、次のリクエストはtest.js
、コンテンツが「123」のファイルを作成し、ブランチに「main」という名前のコミットのメッセージ「test」を作成します。
PUT https://api.github.com/repos/USER/REPO/contents/test.js
{
"branch": "main",
"message": "test",
"content": "MTIz"
}