ぷらすのブログ

GitHub APIを使ってブランチを新規作成する

#開発#GitHub

こんにちは、@p1assです。

先日、GitHub API を使用して git のブランチを作成しようとしたのですが、純粋にブランチを作成する API が生えておらず、色々調べた結果作成できることが分かってのでメモを残しておきます。

方法

ここに書いてありました。

GitHub API を用いてブランチを作成するには、git の ref(参照)を操作する API を使用します。

https://docs.github.com/ja/rest/reference/git#refs

まず参照を取得する API を用いて起点となるコミットのリビジョンハッシュを取得します。

$ TOKEN=<AUTH_TOKEN>
$ AUTHOR=<AUTHOR>
$ REPO=<REPOSITORY>
$ BASE_BRANCH=master
$ curl -s -H "Authorization: token ${TOKEN}" https://api.github.com/repos/${AUTHOR}/${REPO}/git/refs/heads/${BASE_BRANCH}
[
  {
    "ref": "refs/heads/master",
    "node_id": "...",
    "url": "https://api.github.com/repos/<AUTHOR>/REPOSITORY>/git/refs/heads/master",
    "object": {
      "sha": "ハッシュ値",
      "type": "commit",
      "url": "https://api.github.com/repos/<AUTHOR>/REPOSITORY>/git/commits/...."
    }
  }
]

リビジョンハッシュ値を取得することがでました。これを起点に参照を作成します。

$ NEW_BRANCH=<NEW_BRANCH_NAME>
$ HASH=<.[0].object.sha に当たるハッシュ>
$ curl -X POST -s -H "Authorization: token ${TOKEN}" -d '{"ref": "refs/heads/'"${NEW_BRANCH}"'","sha":"'"${HASH}"'"}' https://api.github.com/repos/${AUTHOR}/${REPO}/git/refs
{
  "ref": "refs/heads/<NEW_BRANCH_NAME>",
  "node_id": "...",
  "url": "https://api.github.com/repos/<AUTHOR>/<REPO>/git/refs/heads/<NEW_BRANCH_NAME>",
  "object": {
    "sha": "...",
    "type": "commit",
    "url": "https://api.github.com/repos/<AURHOT>/<REPO>/git/commits/..."
  }
}

なぜこれでブランチを作成できるのか?

git におけるブランチは基本的にポインタ(参照)であり、コミットを指しています。

引用: Git の内側 - Git の参照

そのため、起点となるコミットのハッシュ値に対して参照を作ることはブランチを作成する行為を一致します。

感想

git の内部仕組みをあまり知らなかったので勉強になりました。

← 21卒 Web系ソフトウェアエンジニア職で新卒就活したので結果をまとめるDocker Contextsを使ってDocker Composeをデプロイする際の注意点 →
Topへ戻る