mumumu の日記

Development, Translation, daily life, thoughts, and so on.

restore github page from source branch

github page を Octopress で公開している人は、きっと master が HTML と CSS だけで出来たリポジトリを github に持っており、かつ source ブランチでそれを生成するための Rakefile や _config.yml、ブログエントリの markdown、テーマなどをバックアップしているはずだ。

では、何かの拍子にブログを書く環境を壊してしまい、source ブランチから復活させなければならなくなった場合はどうだろうか。今朝ちょうどそういう状況に陥ってしまい、復旧に少し手間取ったのでメモしておく。

要するに clone した後、 _deploy ディレクトリを生成し、そこで git リポジトリを再初期化し、github page へのリポジトリを remote に加えるだけだ。 要するに、 setup_github_pagesタスクの後半 を真似ただけである。

1
2
3
4
5
6
$ git clone git@github.com:mumumu/mumumu.github.io.git blog
$ cd blog
$ mkdir _deploy
$ cd _deploy
$ git init
$ git remote add origin git@github.com:mumumu/mumumu.github.io

あとは rake new_post["some title"] で記事を書き、rake generaterake gen_deploy の操作でいつも通り記事が公開できるようになる。

こうしたリストアの操作と、 git push origin source というバックアップ操作が面倒くさかったので、以下のような patch を Rakefile に足しておいた。

まずは バックアップの操作が rake gen_deploy後に自動で行われるようにした。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@@ -252,16 +252,38 @@ multitask :push do
   Rake::Task[:copydot].invoke(public_dir, deploy_dir)
   puts "\n## copying #{public_dir} to #{deploy_dir}"
   cp_r "#{public_dir}/.", deploy_dir
+  message = "Site updated at #{Time.now.utc}"
   cd "#{deploy_dir}" do
     system "git add ."
     system "git add -u"
     puts "\n## Commiting: Site updated at #{Time.now.utc}"
-    message = "Site updated at #{Time.now.utc}"
     system "git commit -m \"#{message}\""
     puts "\n## Pushing generated #{deploy_dir} website"
     system "git push origin #{deploy_branch} --force"
+  end
+
+  cd "#{deploy_dir}/../source" do
+    system "git add *"
+    puts "\n## Commiting: Site updated at #{Time.now.utc}"
+    system "git commit -m \"#{message}\""
+    puts "\n## Pushing source branch as backup"
+    system "git push origin source"
     puts "\n## Github Pages deploy complete"
   end
+
+end

github page のソースを clone した後、_deploy ディレクトリを再生成し、master として remote を足すタスクも追加した。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
+
+desc "restore github pages directory"
+task :restore_github_pages_directory do
+  puts "\n## Re-creating deploy directory"
+  rm_rf deploy_dir
+  mkdir_p deploy_dir
+
+  cd "#{deploy_dir}" do
+    repo_url = "git@github.com:mumumu/mumumu.github.io"
+    system "git init"
+    system "git remote add origin #{repo_url}"
+  end
+ end

 desc "Update configurations to support publishing to root or sub directory"