リポジトリの初期化。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 を公開するという方針。