emacsの設定ファイルをバージョン管理してみた
二つ以上のPCでemacsを利用していると、設定ファイルの共有が面倒になってきたので、gitでバージョン管理してみました。
構成
自分の場合は、さくらインターネットを共用リポジトリにしました。また、ローカルの方では、ホームディレクトリにemacs/ディレクトリをローカルリポジトリとして作成し、その中に.emacsファイルと.emacs.d/ディレクトリ(カスタマイズ用のelispファイル等はここに入れています)を設置しました。
さくらインターネットでの共用リポジトリの作成はhttp://d.hatena.ne.jp/shiba1029196473/20100324/1269406164も参照してください。
サーバ側に共用リポジトリを作成
すぐできます。
[server]$ mkdir -p repository/emacs.git
[server]$ cd repository/emacs.git
[server]$ git --bare init --share
ローカル側にローカルリポジトリを作成
まず、emacsディレクトリを作り、ローカルリポジトリを作成します。
[local]$ mkdir emacs
[local]$ mkdir emacs/
[local]$ cd emacs
[local]$ git init
次に現在の設定をemacsディレクトリに移し、最初のコミットを行います。
[local]$ mv .emacs emacs/
[local]$ mv .emacs.d/ emacs/
[local]$ git add .
[local]$ git commit -m "emacs設定のバージョン管理開始"
リモートリポジトリ設定を行い、最初のpushを行います。
[local]$ git remote add origin ssh://username@username.sakura.ne.jp/home/username/repository/emacs.git
[local]$ git config branch.master.remote origin
[local]$ git config branch.master.merge refs/heads/master
[local]$ git push ssh://username@username.sakura.ne.jp/home/username/repository/emacs.git master
homeディレクトリにシンボリックリンク
実際emacsはhomeディレクトリから設定を読み込むので、シンボリックリンクを張っておきます。
[local]$ ln -s ~/emacs/.emacs ~/.emacs
[local]$ ln -s ~/emacs/.emacs.d ~/.emacs.d
これでローカルリポジトリと共用リポジトリの設定が終わりました。違うPCからでも共用リポジトリをcloneしてくることで、設定を共有できます。またpull,pushを使うことで、どのPCの設定も最新にすることができます。実際これよりもっと簡単な方法があるかもしれません。もしあれば、コメントにて教えてもらえるとありがたいです。
さくらインターネットをgitの共用リポジトリにする方法
今回は、さくらインターネットに共用リポジトリを作成するやり方を書きます。少しはまりました。また、gitのインストール方法はhttp://d.hatena.ne.jp/shiba1029196473/20100219に書いてあるので、参考にしてください。
ローカルにリポジトリを作成
これは簡単です。
[local]$ mkdir gitTest
[local]$ cd gitTest
[local]$ git init
これで、ローカルリポジトリが完成。
さくらインターネット内に共用リポジトリを作成
これも、難しくありません。わかりやすくするために、共用リポジトリはすべてgitディレクトリに入れます。
[server]$ mkdir -p git/gitTest.git
[server]$ cd git/gitTest.git
[server]$ git --bare init --share
これで完成。gitの共用リポジトリを作る際は、--bare,--shareオプションをつけるみたいです。
ローカルリポジトリに共用リポジトリを登録
http://d.hatena.ne.jp/shiba1029196473/20100323のやり方をつかってできます。
[local]$ git remote add origin ssh://username@username.sakura.ne.jp/home/username/git/gitTest.git
[local]$ git config branch.master.remote origin
[local]$ git config branch.master.merge refs/heads/master
SSHトンネリングへの対応
普通なら、上までの手順で共用リポジトリができていますが、さくらインターネットではエラーがおきます。
[local]$ cd gitTest
[local]$ git push
bash: git-receive-pack: command not found
fatal: The remote end hung up unexpectedly
もちろんpullもできません。これは、ssh経由でコマンドを実行した場合、.bashrc等が読み込まれないため、起こります。普通だと、.ssh/environmentにPATHを書いて、/etc/ssh/sshd_configのPermitUserEnvironmentという項目をyesにすることで対処できます。しかし、さくらインターネットでこの方法は使えないので、次の方法で対処します。
[server]$ ln -s /home/username/local/git/bin /home/username/bin
これは、sshトンネリングのPATHが/home/username/binには通っているので、そこにシンボリックを張ってしまえばいいってだけの対応です。さくらインターネットではこれぐらいしか対処できないのかもしれません。
※3/28追記
gitの標準的なログメッセージ
gitでコミットするとき、メッセージを書くと思うが、何も考えず適当に書くと、後で何をしていたか思い出せなくなってしまう。ポイントとして次のようなメッセージ形式にするとよいらしい。
- コミットがする変更の内容を1行で要約
- 1行の空行
- 変更した理由の説明
diredの主要キーバインドメモ
http://www.bookshelf.jp/soft/meadow_25.html#SEC267が参考になったのでメモ。
dired での主要なキーバインド
dired でのディレクトリ移動,削除などの作業は以下のようにします.
- nとp:カーソル移動
- RET:ファイルを開く. e や f でも OK
- ^:1 つ上のディレクトリへ移動
- D:ファイルを削除.
- C:ファイルをコピー
- R:ファイル名を変更
- +:ディレクトリを作る
- s:並び方を変更. C-u s で ls の引数を変更できる
その他のキーバインド
- m:選択したファイルにマークをつける. ディレクトリ名のところで押すとすべてのファイルにマークをつける
- u:選択したファイルのマークをはずす. ディレクトリ名のところで押すとすべてのファイルのマークをはずす
- t:ファイルのマークを反転する. マークが 1 個もなければ,すべてにマークがつく.エクスプローラの「選択の切り替え」に相当する.
- g:ディレクトリ内容を再度読み取る. エクスプローラなどで変更した変更を適用する時などに使う
- d:ファイルに削除マークをつける. さらに, x を押すと削除される (ごみ箱へは行かないので注意).
- k:マークのついたファイルを dired から消す. ファイル自体を消すわけではない.
- A:マークしたファイルを検索. M-, で連続して検索できる. grep を使うほどでもない時に便利. サブディレクトリのファイルも選択可能.
- Q:マークしたファイルに対し, query-replace-regexp (文字列の置換) を実行
- =:diff を取る
- B:ファイルをバイトコンパイル
- Z:ファイルを gz に圧縮
- !:shell 関数を実行. X でも可能
- .:バックアップファイルなどを削除
- i:サブディレクトリの内容を表示. $で表示/非表示をトグルできる
macfusionの鍵認証
この前、macfusionをmac OS X snow leopardに入れました。が、どうしても鍵認証の設定方法がわからない。。。昔のmacfusionにはGUIで簡単に設定できましたらしいのですが、今は見つからない。
それで、いろいろやってみたら、sshfsの設定のSSH Advancedタブをクリックし、Extra Optionsの部分に
-oIdentityFile=(鍵ファイルへのPath)を入力すると、できました。これでいいのかどうか、わからないため、他にやり方有れば教えてください。