綾小路龍之介の素人思考

[github] gh-pages ブランチを使ったサイト

静的なサイトしか作れないとは言うものの、結局ローカルで生成したものをアップロードしているだけならこれでも十分。いろいろ試してみよう。ざっくりと使った感じ、git 的にはシンボリックリンクは使えるけど、githubpages的にはシンボリックリンクは 404 になるみたい。ちょっと残念。あと、リポジトリサイズが50MBまでみたい。画像を沢山使うような場合はキツイかも。

リポジトリの初期化。commitメッセージに使う名前とメールアドレスを登録。

$ git init
Initialized empty Git repository in /*********************************/.git/
$ git config user.name "AYANOKOUZI, Ryuunosuke" && git config user.email "i38w7i3@yahoo.co.jp"

適当な (無意味な) コミットを行って master ブランチを作る。このコミットが最悪のケースで戻れるところにするために何もファイルの無い、空のコミット。

$ git commit --allow-empty -m "Initial commit"
[master (root-commit) 424ecde] Initial commit

master ブランチを起点に dummy ブランチを作成。リモートのdh-pagesブランチを削除するためのトリック。

$ git branch dummy master

実際に web ページとして提供される gh-pages ブランチを master 起点で作成。このブランチで作業は行わない。他のブランチで行った作業を merge して push する専用。

$ git branch gh-pages_merge master

作業用ブランチ gh-pages_work を master 起点で作成。checkout して色々作業。

$ git branch gh-pages_work master
$ git checkout gh-pages_work
Switched to branch 'gh-pages_work'
$ touch index.html
$ git add index.html
$ git commit -a -vv -m "2nd commit"
$ cat << EOT >> index.html
<!DOCTYPE html>
<html>
<body>
<h1>Hello World</h1>
<p>I'm hosted with GitHub Pages.</p>
<!-- SECRET DATA -->
</body>
</html>
EOT
$ git commit -a -vv -m "3rd commit"

作業用ブランチで行った変更をマージしてpush 用ブランチからpushするための準備を整える。ここで表示されるログの内容がpushされる。

$ git checkout gh-pages_merge
$ git merge --squash gh-pages_work
$ git commit -a -vv -m "update"

ここで初めてリモートリポジトリを追加。dummy を リモートの master してpush。

$ git remote add github git@github.com:********/********.git
$ git remote -v

ローカルブランチとリモートブランチの対応関係 (push 先、pull 元) を忘れないように --set-upstream-to でアップストリームを登録。ローカルのgh-pages_mergeブランチをリモートのgh-pagesブランチにpushする。

$ git push github gh-pages_merge:gh-pages
$ git branch gh-pages_merge --set-upstream-to=github/gh-pages

最後に作業用ブランチに checkout して終わる。

$ git checkout gh-pages_work

秘密のデータがpushされた場合

ここで、リモートの gh-pages ブランチに履歴に残したくないデータを push してしまったとする。その場合はブランチごと削除。

$ git push github :gh-pages

リモートの gh-pages ブランチに push していたのはローカルの gh-pages_merge ブランチだが、これは push 用ブランチなので、これも削除。

$ git branch -D gh-pages_merge

ローカルの gh-pages_work ブランチで履歴に残したくないデータの削除作業を行い、その旨commit messageに記録。

$ git checkout gh-pages_work
$ sed -i -e 's/SECRET DATA//g' index.html
$ git commit -a -vv -m "remove secret data"

改めて gh-pages_merge ブランチを作成。して gh-pages_work ブランチから merge する。

$ git branch gh-pages_merge master
$ git checkout gh-pages_merge
$ git merge --squash gh-pages_work
$ git commit -a -vv -m "update"
$ git push github gh-pages_merge:gh-pages

最後に作業用ブランチに checkout して終わる。

$ git checkout gh-pages_work

gh-pages_work にはすべての履歴が含まれるが、これを公開するのではなく、gh-pages_work を merege して得られる gh-pages_merge を公開するという方針。

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2008-07-07T11:47:58+09:00
  2. Modified: 2008-07-07T11:47:58+09:00
  3. Generated: 2017-04-20T23:09:16+09:00