Git
GitHub
api

GitHub APIで空コミットをコミットする

背景

空コミットしてプルリク作成をスクリプトで自動化したい
gitリポジトリをcloneしてコミットしてpushするのは面倒
GitHubのAPIでcloneなして空コミットができそうだったのでやってみた

マニュアル

https://developer.github.com/v3/git/

やり方

  • ブランチ(分岐元)のtreeを取得しコミットのshaを取得
GET /repos/:owner/:repo/git/trees/:branch?recursive=1
  -> "sha": "<commit-sha>" ...(*1)
  • 取得したコミットのshaを指定してtreeのshaを取得
GET /repos/:owner/:repo/git/commits/:sha <---(*1)
   -> "tree":{ "sha": "<tree-sha>"} ...(*2)
  • 取得treeを指定してcommitする(これが空コミットになる)
POST /repos/:owner/:repo/git/commits -d
  '{
    "message": "create new branch",
    "author": {
      "name": "<commiter-name>",
      "email": "<commiter-email>"
    },
    "parents": [
      "<commit-sha>" <---(*1)
    ],
    "tree": "<tree-sha>" <---(*2)
  }'

  -> "sha": "<new-commit-sha>" ...(*3)
  • ブランチを新しく作成する
POST /repos/:owner/:repo/git/refs -d
  '{
    "ref": "refs/heads/<branch-name>",
    "sha": "<new-commit-sha>" <---(*3)
  }'

さいごに

APIでもできた。gitリポジトリによっては(サイズが大きくて重たいものだと)APIでやったほうが早い。