複数の PC で howm メモを同期するために今までは手動で rsync していたが、
面倒なので自動化して併せて git で管理するようにしてみた。
以下に、自宅内サーバ Remote に公開リポジトリを用意し、
2 台のローカルマシン LocalA, LocalB で howm メモを同期する環境を
作成した方法をメモしておく。
git 環境の導入
参考にしたサイト:
せっかちな人のための git 入門 – git をインストールし、共同で開発できる環境を整えるまで
まず、 LocalA で git リポジトリを作成した。 howm のディレクトリは ~/work/howm にあるものとする。
LocalA:~$ cd work/howm LocalA:~/work/howm$ git init LocalA:~/work/howm$ git add . LocalA:~/work/howm$ git commit -m 'first commit'
git init でリポジトリを作成し、 git add . でカレントディレクトリ以下の全てのファイルをリポジトリに追加、
git commit でコミットメッセージを入力してコミットする。
次にサーバ Remote で公開リポジトリを準備する。
Remote:~$ cd work Remote:~/work$ mkdir howm.git Remote:~/work$ cd howm.git Remote:~/work/howm.git$ git --bare init
–bare オプションを付けて git init すると公開リポジトリになるようだ。
そして localA のローカルリポジトリ (master ブランチ) を Remote のリモートリポジトリ (origin ブランチ) に反映させる。
LocalA:~/work/howm$ git remote add origin ssh://Remote/home/user/work/howm.git LocalA:~/work/howm$ git push origin master
git push origin master は master を origin にプッシュするという意味。
さて、Remote のリポジトリから LocalB にリポジトリをコピー (clone) してみる。
LocalB:$ cd work LocalB:~/work$ git clone ssh://Remote/home/user/work/howm.git
すると howm ディレクトリが生成され、その中にファイルがコピーされる。
LocalA, LocalB のリポジトリを Remote のリポジトリに反映するには以下のコマンドを実行すればよい。
$ cd ~/work/howm $ git add new-file $ git commit -m 'comment message' $ git push origin master
逆に、Remote のリポジトリをローカルに反映するには以下のコマンドを実行すればよい。
$ cd ~/work/howm $ git pull origin master
git push と git pull では引数 (origin と master) を省略できる。
(LocalA だと省略できなかった。 git clone すれば出来るようになった。)
howm メモ自動同期設定
howm を開いたり、保存したときに自動的に同期するための設定を行う。
参考にしたサイト:
2009-09-09 howmのメモファイルをSubversionを使って同期をとる方法(その2)
まず、シェルスクリプトを作成する。
~/work/howm/.howm-mode-on.sh:
#!/bin/sh cd $HOME/work/howm/ git pull
~/work/howm/.howm-after-save.sh:
#!/bin/sh cd $HOME/work/howm/ git pull git add . git commit -m "`date "+%F %T"`" git push
これらのシェルスクリプトを、howm-mode を開いたとき、メニューを更新したとき、メモを保存したときに実行する hook を .emacs に追記する。
.emacs:
(eval-after-load "howm" '(progn (add-hook 'howm-mode-hook (lambda () (shell-command-to-string (concat (expand-file-name ".howm-mode-on.sh" howm-directory) " &>/dev/null &")))) (add-hook 'howm-menu-hook (lambda () (shell-command-to-string (concat (expand-file-name ".howm-mode-on.sh" howm-directory) " &>/dev/null &")))) (add-hook 'howm-after-save-hook (lambda () (shell-command-to-string (concat (expand-file-name ".howm-after-save.sh" howm-directory) " &>/dev/null &")))) ))
以上の設定で、howm メモを LocalA, LocalB 間で自動に同期できるようになった。
ところで、シェルスクリプト書いて気づいたけど sh (というか dash) って pushd, popd 無いんだね。