バージョン管理

例えば,

foo.txtを編集して保存したんだけど,編集する前の版の方が良かった
編集する前の版を取得する方法はないか?
「ごみ箱」を探せば過去に削除したファイルが出てくるんだから,過去に保存したファイルだってなんとかなるでしょう?

などというのは,良くある話である.これに対して

CVSを使いなさい
ある程度編集した時点でcommitしておけば,いつでも過去の版を取得できる

というのも,良くある回答であろう.少なくともCVSの祖たるRCSが開発された経緯はこういうものであったと理解している.

さて,ここでRCSなりCVSなりを使えば問題は全て解決するのかというとそうではない.少なくとも二つの問題が考えられる.一つ目は「commitしなかった修正に関してはどうしようもない」という問題であり,二つ目は「ファイルの追加や削除をいちいちRCS/CVS/Subversionに指示しなくてはならないのは非常に苦痛」という問題である.

要するに,そこにバージョン管理ツールが存在して,それに対してユーザーが明示的に操作を行わなければバージョンが管理されないという現状に不満を感じる.ファイルの保存という操作を,自動保存という機能で,全く頭の中から追い払ってしまえている僕としては,もっと透過的にバージョン管理されていて欲しいのだ.

極端な話,ファイルの保存が行われる度に,ディレクトリのスナップショットをとって,それを任意の時点で復元できればことは足りる.RCSが開発された当時であればマシンパワーが足りなかっただろうが,現在はどうだろうか?あるいはシェルと連携して,ファイルのリネームや削除を上手く処理すれば,svn addとかsvn delとかタイプする必要は大幅に減少するだろう.*1


バージョン管理が,もっと透過的な作業になれば,現在プログラマのためだけのツールであるバージョン管理ツールはもっと幅広く利用されるはずだし,そうすればもっとみんなが楽をできるはずなのだが.


でも,「これはバージョン管理なのか?」なんて考えると,微妙な気もしてくるが.

*1:もちろん今挙げた方法では,チーム開発と大変に相性が悪いだろう.それは仕方がない.「シェルと連携すれば〜」という話は別として,CVSsubversionが対象としているチーム開発の問題からは,分けて考える必要がある.