自動的なバージョン管理

概要

講義: 5 分
演習: 0 分
質問
  • バージョン管理って何?なんで必要なの?

目標
  • 自動的なバージョン管理システムの利点を理解する。

  • Gitの基本を理解する。

それではまず、どのようにしてバージョン管理システムが 「いつ」、「何」を、「誰」が編集したのかを記録・管理しているかを見ていきましょう。 他の人と共同作業をしていなくても、 以下の状況に陥るより、自動的なバージョン管理を使うほうが大分良いはずです:

Piled Higher and Deeper by Jorge Cham, http://www.phdcomics.com/comics/archive_print.php?comicid=1531

「高く、深く積み上げる」Jorge Cham 作、http://www.phdcomics.com

皆さんもこんな経験をされたことがあるはずです。複数の、(それもほとんど 内容が同じの)文書のコピーを保存しておくのは馬鹿げたことです。文書作成ソフトの中には、 例えばMicrosoft Wordの変更履歴、Google Docsのバージョン履歴、LibreOfficeの変更の記録・表示、 こういった状況にある程度うまく対応できるものもあります。

バージョン管理システムは、基礎となるドキュメントを元に、 加えられた全ての変更点を記録していきます。ドキュメントの 進歩を記録していると考えてもらって構いません。変更点を最初の状況まで 戻してから、最新版になるまでの変更を一つずつ再現していくことができます。

Changes Are Saved Sequentially

「変更点」と「ドキュメント」を別々の物として考えてみると、基礎となるドキュメントに 異なる変更点を「再現」する事によって、結果的に違ったバージョンのドキュメントを 作る事が可能だという事が分かります。例えば、下の図のように二人のユーザーが同じドキュメントに 違った編集を加えた場合です。

Different Versions Can be Saved

変更点の衝突(コンフリクト)が無ければ、二つ以上の違った変更点を基礎ドキュメントに加えることさえできます。

Multiple Versions Can be Merged

バージョン管理システムは、ユーザーがドキュメントに加えた変更点を記録するツールであり、 結果的にドキュメントの違ったバージョンを作成する事ができます。このツールを活用 する事によって、次のバージョンに加える変更点(個々の変更点は 「commit(コミット)」と呼びます)を決める事ができ、変更点に関するメタデータも一緒に保存する事ができます。 特定のプロジェクトのコミット履歴とそれに関するメタデータを総じて 「repository(リポジトリ)」と呼びます。リポジトリは 別々のコンピュータと同期させる事が出来るので、他人との共同作業を潤滑に進めることが可能になります。

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

自動化されたバージョン管理システムは最近発明されたものではありません。 RCS、CVS、Subversionなどのツールは1980年前半から存在しており、多くの会社に使われていました。 しかし、これらのツールでは出来る事に制限があり、多くはもう時代遅れとされています。 現代使われているシステム、例えばGitやMercurial、は 分散されています。というのは、特定のサーバーを必要とせずにシステムをホストする事が出来るという事です。 現代のシステムには大変便利で効果的な「merge(マージ)」機能が備われており、同じファイルを 複数人で作業する事が可能になりました。

論文を書くにあたって

  • 例えば、論文のために数百行書いたとします。しばらくして、間違えてその文章を編集してしまいます。 どうしたら以前書いた文章を取り戻すことができるのでしょう?そもそも、可能なのでしょうか?

  • 五人の共著者がいるとします。どうやって全員の変更やコメントを管理すれば良いのでしょう? LibreOffice WriterやMicrosoft Wordの場合、こういった変更やコメントを変更履歴機能で受け入れると どうなるのでしょう?変更点は記録されるのでしょうか?

まとめ

  • バージョン管理とは、制限無く「元に戻す」ことができる機能。

  • バージョン管理を使えば、複数の人と同時進行で作業をする事が出来る。