Table of Contents
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でのブログ編集ができるようになったので、今日のところは満足です。