karasuyamatenguの日記

2011-12-18

バージョン管理システムの歴史

08:22

TortoiseCVSの作者がバージョン管理システムの歴史を各イノベーションがもたらした「驚き」を語りながらふりかえる: http://www.flourish.org/blog/?p=397

以下、自分の体験とごっちゃ混ぜにして要約する。原文を読むことを勧める。

ソースコードをテキストファイルとして保存する! (60年代)

これすら常識でない時代があったこということがASCIIの歴史を読むとうかがえるらしい。

人力バージョン管理! (60年代)

ソース管理部門にディスクを持っていくとそこのスタッフが顧客用の製品をビルドしてくれた…

SCCS: 複数のバージョンを一つのファイルに保存! (70年代)

McIlroy先生の“An Algorithm for Differential File Comparison”によって可能になったらしい。

RCS: 各自がチェックアウト可! (80年代前半)

シンボリックリンク張ってチェックアウトするのやったことあるな。今時の人にはピンとこないかもしれないが、この時点では開発が全て一つのマシンで行われるのが一般的だった。

SCCSのアルゴリズムの「反対」(reverse-deltas)をやっるこによりSCCSを超越したと書いてある。何のことかわからない。(要リサーチ)

CVS: 複数のファイルを一括管理、複数の人が同時に作業した結果をマージ! (80年代後半)

これまでは個々のファイルしか管理できなかった。rcsで「ci -u *」とかしても、それはそのディレクトリ内だけで、プロジェクト階層を一気にチェックインとかできなかった。トランザクションとか無かったけど、それでもプロジェクト単位で管理できることが画期的だった。

それよりも、排他的なロックを使わず複数の開発者が同時に作業できるというのが素晴しかった。

元記事の著者はVisual SourceSafeからCVSに移行したときの驚きをこう語っている:

これ(cvs)が約束しているような魔法 --複数の人が同時に同じファイルを編集しそれを間違いなく何も壊すことなくマージすること-- ができるとは正直言って信じがたかった。

そういえば「hoge.cチェックアウトしたいから、チェックインして~」とか日々やるのが面倒になって、会社全般をRCSからCVSに移行したな。(多分そこで書いだどのコードよりもこれが最高の貢献だったと思う) その後、VSSを使うハメになって排他的シングルスレッド開発に逆戻りしたときには「これを商品として売っているのか!」とびっくりした。

CVSクライアントサーバ機能: リポジトリをネットワークを介してアクセス! (90年代半ば)

1994年にTCPクライアントサーバ機能がCVSに追加された。 RCSにもネットワーク機能が追加されていたなんて知らなかった。

SourceForge: 無償のオープンソース・バージョン管理ホスティング! (1999年)

オープンソースプロジェクトの過去のバージョンが発見しにくいという問題が切っ掛けで第一次ネットバブルの勢いにのったVA LinuxSourceForgeを立ち上げたそうな。当時はホスティングもそう安くなかったし、バージョン管理やバグ管理システムを運営するのもそう簡単ではなかった。

SourceForgeって今ではぱっとしないけど、考えてみると随分先を行っていたんだな。

Mercurial, Git: 分散型バージョン管理システム (2005年)

分散型バージョン管理システムが革命的な理由をいまさら語る必要もんだいだろう。それとも分散型しか知らない世代がもう実在しているのだろうか?

その斬新さを示すコメント:

GitHub: (2008年)

GitHubのもたらした斬新さ:他人のコードに加えた細やかなハックすら公開するということ。それまでは、このような変更は自分のコンピュータに置きっぱなしだった。

GitHub、というかこのサイトが確立したソーシャル開発文化は始まったばかりで、それによる変革はこれから明かになってくるだろう。

元記事著者のGitHubに関するポスト:

ソフトウエア開発だけ?

バージョン管理システムソフトウエア開発に大きな進歩をもたらした。このようなイノベーションは政府、ヘルスケア、ジャーナリズム、データなどの各分野でも可能なのだろうか? という問で元記事は終っている。

この問いには社会改革とビジネスにおけるチャンスが秘められていると思う。

トラックバック - http://d.hatena.ne.jp/karasuyamatengu/20111218/1324164137