mvc.el

mvc.el とは?

Mercurial/Git/Subversion/Bazaar に対応した psvn.el 的なメニューベースのバージョン管理フロントエンドです。

phg thumbnail0

presentation_mvc_20131101_0.mp4 demo movie

そこそこ高速に動作し頻度の高いコマンドは非同期で実行する上、複数バッファとタブに対応しているため、適切なディレクトリ構成ならばストレスの少ない小気味良い環境を構築できます。

status から "!" キーで起動する mvc-cheet-sheet-mode という、あらかじめ登録しておいたコマンド群を指定したファイルに対して適用できる、 history よりも強力で柔軟なコマンドラインインターフェースを備えています。なんだかんだとコマンド直打ちが必要になる git で非常に便利です(git 用に shell を上げておく必要がなくなります)。

mvc-cheet-sheet-mode に登録できるのはバージョン管理コマンドに限らないため、プロジェクトで必要な make, mysql, rsync や deploy コマンドを登録しておくと便利です。

具体的には以下のようなテキストをプロジェクトに対して保存しておくイメージです。

# "\C-c\C-c" to run current line command
%program branch wac
%program branch
%program branch -r
%program stash list
%program status
%program checkout wac
%program log --stat -n 8 
%program show %files
%program checkout %files
%program commit --file=%commitlog
%program commit -m 'merge'
%program reset --soft 
%program reset --hard
make package
mysql -u user -p

入手方法

Git

旧版

Subversion 1.6 以降
mvc.el.20111023_1.xz (20032 bytes sha1sum:eb6c3c9fbb259e203fbaec2f9a2d181fbc14e14c)
Subversion 1.5 系
mvc.el.20090425_0.bz2 (20097 bytes sha1sum:0af48ab32dc049f5ad3034b3f258631d6bdf0b8e)
Subversion 1.4 以前
mvc.el.20090307_0.bz2 (20053 bytes sha1sum:9619f93df191d9e0034fa8a9f3987ee67adfe3cc)

何かありましたら twitter @wachikunwac@umiushi.org へのメイルなど、お気軽にどうぞ。

作者の使用環境

バージョン管理ツール 状況
Git LAN 経由の sshfs 上で Git をほぼ毎日使用しています。
Mercurial インターネット経由の sshfs 上で Mercurial をほぼ毎日使用しています。わりと普通にストレスなく扱えています。
Subversion 27000 ファイル以上のプロジェクトで毎日使用していました。もちろん毎回大量のファイルを扱うわけではなく、担当ディレクトリ以下の数 100 ファイル程度を主に相手にしていましたが。

実装状況

- Mercurial git bazaar Subversion
status(async)
update(async)
push/pull(async) -
commit(async)
add(async)
remove
rename
annotate(async)
revert(async) ○(mvcautorevert / reset / checkout)
diff(async) / ediff
log(async)
git stage - - -
svn propset - - -
cat (テスト中。ログのバージョンから cat 可能)
任意のコマンド起動

mvcautorevert は hg/svn revert 風の動作をするラッパー的コマンドです。

TODO

 

News

2014年11月2日(日)
0.2
  • mvc-command を mvc-cheat-sheet に変更
  • バッファサイズが mvc-default-log-face-limit 以上ならば face を付けないようにした
  • git での作業がいろいろと便利に
  • その他細かな不具合修正
2014年8月9日(土)
0.1-test14
  • git を git らしく staging に対してコミットできるモードを追加(git ではデフォルト)
  • server-start していれば commit 時にそちらを使うようにした
  • .mvcignore を追加
  • mvc に --log-lines を追加
  • その他細かな不具合修正
2013年10月27日(日)
0.1-test12
  • mvc-log-mode で一発 diff できるようにした
  • git status などで表示される重要なメッセージを表示する information を追加した
  • mvc-command の %commitlog を動作するようにした
  • dcommand.el の SPECIAL に一部対応
2013年10月13日(日)
0.1-test11
  • mvc-command(git などでよくつかうコマンドを簡単に実行できる機能) をヒストリから専用バッファでメニューリスト化し保存できるようにした (超便利!)
  • git で ignore が常に表示されていた不具合を修正
  • branch 名の表示が遅延していた不具合を修正
  • git diff でバージョン指定できなかった不具合を修正
2013年9月28日(土)
0.1-test10
  • git で rename を扱うとき、ファイルを壊すことがあったのを修正
  • git log に --stat を追加した
  • その他細かな修正
2013年5月22日(水)
0.1-test9
  • git revert の処理を stage か working directory かで分けた
  • git diff の処理を stage か working directory かで分けた
  • git では pull を fetch にした
2013年1月19日(土)
0.1-test8
  • ヒストリの動作がおかしかったのを修正
  • ヒストリに shelve/unshelve を追加した
  • バージョン指定ミスを修正
2013年1月14日(月)
0.1-test7
  • mvc-command の後に mvc-async-status を実行するようにした
  • ブランチを mvc-command の後に取得するようにした
  • ヒストリに glog を追加した
  • mvc-default-command-history の上の方が微妙に危険なので、無難なものにした
  • プロセスとログファイルの coding system を指定できるようにした
  • バックアップファイルがあるとディレクトリが不必要なときに表示されることがあったのを修正

News ログ

 

Screenshot

画像をクリックすると大きな画像を表示します。

phg thumbnail0

 

導入手順

mvc.el を load-path の通った場所に置き、 .emacs へ次のような 1 行を付け足すだけです。

0.1 以降は同梱の mvc コマンドをパスの通った場所へ置く必要があります。 Perl が必要になります。

(require 'mvc)

M-x mvc-status で起動します。

好みによって

$ emacs --batch --funcall batch-byte-compile mvc.el

などとしてバイトコンパイルしても良いかもしれません。(作者は速度的に困ってないのでしていません。(Athlon X2 4850e から C3-1GHz あたりの機械でも十分?))

戻る