Edited at

ビルド結果を GitHub Pages で公開するために別ブランチから `gh-pages` ブランチにコミットする

More than 3 years have passed since last update.


前提・背景



  • GitHub Pages でプロジェクトサイトを公開する場合、プロジェクトの gh-pages ブランチに公開したいファイル群をコミットして GitHub のリポジトリに push する。

  • TypeScript を使っている場合など、公開するファイル群のソースコードを gh-pages ブランチとは別に管理したい場合がある。


    • 例えば、master ブランチに gh-pages で公開するファイル群のソースコードを管理して、ビルドの成果物を gh-pages で公開したい、という状況。



上記のような状況では、master ブランチなどでビルドを行い、その成果物を gh-pages にコミットしたいということになります。 ブランチの切り替えをせず、ローカルリポジトリを複数用意したりもせずにこれを実現するためのいい方法が確立されてないようなので、ちょっと考えてみました。


gh-pages 以外のブランチでビルドして成果物を gh-pages ブランチにコミットする方法

Git の配管 (Plumbing) コマンドを使い、ツリーオブジェクトを作成し、コミットを作り、gh-pages の参照先コミットを変更する、ということを行います。

具体的には “Committing a subfolder to the gh-pages branch from the other branch” に書いたとおりで、以下のような感じです。 (Windows PowerShell での例。)

# Step 1. ツリーオブジェクトの作成

git add -f ./build/gh-pages # ビルドの成果物を index に追加
# prefix を指定してツリーオブジェクトを作成
$treeObjId = git write-tree --prefix=build/gh-pages
git reset -- ./build/gh-pages # index から削除

# Step 2. コミットの作成
# 上で作成したツリーオブジェクトを基に、`gh-pages` ブランチの参照先コミットを親とするコミットを作成
$commitId = git commit-tree -p gh-pages -m "YOUR COMMIT MESSAGE" $treeObjId

# Step 3. `gh-pages` ブランチの参照先を上で作成したコミットにする
git update-ref refs/heads/gh-pages $commitId

もっといい方法があるかも? と思いつつ、特にいい方法が見つからなかったし思いつかなかったのでこんな感じでやることにしました。


他の方法 : master ブランチでビルドの成果物もバージョン管理

ビルドの成果物も master ブランチにコミットして良いのであれば、Git の subtree の仕組みを使うのが良さそうです。

個人的にはビルドの成果物を gh-pages ブランチ以外にコミットするのはしたくないのでこの方法は採用しませんでした。