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追記

最初の一回目のpush

最初の一回目は、共用リポジトリにmasterブランチがないため、git pushが成功しません。最初の一回目は素直にパスを指定してpushしましょう。

[local]$ cd gitTest
[local]$ git push ssh://username@username.sakura.ne.jp/home/username/git/gitTest.git master

gitでリモートリポジトリの登録方法

ローカルリポジトリで次のコマンドをうつ。

$git remote add origin ssh://(ユーザ名)@(サーバIPアドレスまたはサーバ名)/(リポジトリへのパス)
$git config branch.master.remote origin
$git config branch.master.merge refs/heads/master

また、git cloneでリポジトリを作成したなら、既にこの設定はされているので、必要はない。

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:サブディレクトリの内容を表示. $で表示/非表示をトグルできる

emacsを使い始めた

 windowsからmacに乗り換えたときに、エディタに困った。mi,coteditor等使ってみたが、どうもしっくりこないので、emacsを使ってみることにした。

 emacs自体のカスタマイズが既にプログラミングだから、気長にlisp勉強しようかー。

macfusionの鍵認証

 この前、macfusionをmac OS X snow leopardに入れました。が、どうしても鍵認証の設定方法がわからない。。。昔のmacfusionにはGUIで簡単に設定できましたらしいのですが、今は見つからない。

 それで、いろいろやってみたら、sshfsの設定のSSH Advancedタブをクリックし、Extra Optionsの部分に

-oIdentityFile=(鍵ファイルへのPath)
を入力すると、できました。これでいいのかどうか、わからないため、他にやり方有れば教えてください。