Daydreaming in Brookline, MA

ブログをバックアップする

1 はじめに

このブログはgithub pagesに置いていますが、githubにアップロードされているのはpelican site generatorによって生成されたhtmlファイル等で、org-modeで書いたソースファイルはバックアップされていないことに気が付きました。

2 どうバックアップするか

いくつか案を考えました。

2.1 tarで固めてクラウドにセーブする

最初に思いついた案です。単なるバックアップならこれでもいいかもしれませんが、どうにも微妙です。せっかくブログ自体はgitを使って管理しているのに、ソースファイルだけ前近代的な扱いをしなくてはいけません。

2.2 github pagesにソースファイルを追加する

pelican(+org-mode連携)のソースファイルはcontentディレクトリに置いてあるので、

git add content/*.org

してコミットし、git管理にソースファイルを追加しました。

ここまでは良かったのですが、

git push origin gh-pages:master

とリモートのgithubにpushしようとしたところ、「pushするものは何もない」と(英語で)言われてしまいました。

考えてみると、githubにpushしているのはoutputディレクトリ以下にあるオブジェクトファイルだけなので、その外のファイルをgit addしてもうまくいかないということなのでしょうか???

2.3 githubに専用プライベートリポジトリを作る

次はcontentディレクトリで git init して独立したローカルリポジトリを作り、それをgithubのプライベートな空レポジトリにpushする案です。

レポジトリをネストする場合、普通は git submodule 等を使うようですが、今回のユースケースではネストしたレポジトリは完全に別扱いで参照も不要なため、あえてサブディレクトリで git init します。

githubのサイトで blog というプライベートレポジトリを作っておき、

cd content
git init
git add .
git commit -m "initial commit"
git remote add origin git@github.com:achiwa912/blog.git
git push -u origin main

で無事バックアップに成功しました。

3 別PCにクローンする

せっかくgit管理しているので、別PCでもブログファイルの編集をできるようにしたいところです。そこで、別PC(別のMacのfedora35@virtualbox)上にgit cloneします。

git clone git@github.com:achiwa912/blog.git

ところが、ここでpermission deniedをくらいました。散々トラブルシュートしましたが、原因は大したことなく、このPCの公開鍵(id_rsa.pub)をgithubに登録していないというオチでした。

cat .ssh/id_rsa.pub

の出力をクリップボードにコピーし、githubに登録したところ、無事に git clone できました。

別PCで新たなソースファイル(具体的に言うと、このソースファイルそのもの)を編集し、コミットしてリモートにpushしてみたところ、何事もなく成功しました。いや〜、gitって便利ですね。

4 終わりに

ソースファイル用のプライベートレポジトリにはpelicanのコンパイル環境は持ってきていないので、ブログをコンパイルしてgithub pagesにアップロードするのは元のPCでないとできませんが、ブログのクラウド(github)へのバックアップと別PCでのブログ編集ができるようになったので、今日のところは満足です。