*バージョン管理 [#dff003a7]
#contents
#br

*はじめに [#ee8af286]
バージョン管理ってのは大切です。たとえばプログラムを大幅改造する時にバックアップを取っておかないと、うはwwwwプログラム大幅に変えたら、動かなくなったオワタ\(^o^)/なーんてことになります~
バージョン管理システムとはそういった時に対応するために行ったり、複数人での開発で使われます。~
設定ファイルや文章管理なーんてことにも使われたりetc...~
ここでは、バージョン管理の必要性とその実践、各種バージョン管理システムの使い方を説明するらしい。

*バージョン管理の仕方 [#m0bf45fe]
バージョン管理の方法として以下のようなものが上げられる。
-バージョン管理をしない~
これは非常に簡単であるが、危険度も高い、だが、限られたリソースを有効利用するときには、最大限力を発揮する方法でもある。

-大幅に改造するときだけバックアップ~
意外と使える技である。特に個人製作において使われることが多い。だが、うまく整理しないと、どれが何だか分からなくなることがあるので注意

-バージョン管理システムを使う~
最初に設定すればあとは楽ちん!複数人での開発にも使えるが、ものによってはリソースを大幅に食うので注意。

*バージョン管理システム [#pfa0a1c7]
バージョン管理システム(version control system)ってのは本当に便利やねー
ってことでいくつか有名なバージョン管理システムについて解説します。

以下に一覧を置いておきます。普及度、速度などは主観によるものなので
戦争にならないように。

||CENTER:|CENTER:|CENTER:|CENTER:|CENTER:||c
|CENTER:名前   |速度|ディレクトリの移動|普及度|分散型|個人利用|CENTER:主な使用例|h
|RCS           |    |                  |      |×    |○      ||
|CVS           |×  |×                |◎    |×    |×      |Eclipse|
|Subversion    |○  |△                |◎    |×    |△      |Google Code|
|git           |◎  |○                |○    |○    |○      |Linuxカーネル, wine|
|Mercurial     |◎  |○                |○    |○    |○      |Mozilla, OOo|
|Bazaar        |△  |○                |△    |○    |○      |Ubuntu, MySQL,&br;Emacs|
|LibreSource   |    |○                |×    |      |        ||
|monotone      |    |○                |×    |○    |        |Xaraya|
//ディレクトリの移動とはどういう意味ですか?"svn mv"みたいなこと?

** [[RCS>./rcs]] [#wa27389e]
黎明期のバージョン管理システムのひとつ。基本的に一度にひとつの
テキストファイルを扱う。内部でdiffを利用している。
Wikiエンジンには名前(Revision Control System)どおり、これを
リビジョン管理のバックエンドに用いているものも多い。

** CVS [#s8617e4b]
RCSをベースに築かれた。サーバー・クライアントなやり方でネットワークを
意識して、さらに複数のファイルをプロジェクトとして扱えるよう作られた。


** Subversion(svn) [#o3233d9d]
CVSの使い勝手を意識して作られた。ネットワーク越しの利用やファイル管理に関して強化されている。~
WindowsならVisualSVN Serverを使えば簡単にローカルにSVN鯖を建てられる。~
VisualStudioのStandard以上ならAnkhSVNというアドインでソリューションエクスプローラ上からコミットしたりできておすすめ。~
また、WindowsではTortoiseSVNも便利。ローカル環境もこれ1つで構築できる。エクスプローラーのシェル拡張をモロに使うので好みがわかれるかもしれない。

**[[git>./git]] [#h94ec675]
編集頻度が非常に高いLinuxカーネルの作成において、サーバー負荷が小さくなるよに作ったシステム。ローカルのみでの利用が可能で、サーバーが無くても利用できるため、個人利用にもつかえる。

** Mercurial(hg) [#o5fee1a9]
CVSやSVNのように中央のサーバーを必要としない、いわゆる分散型のバージョン管理システム。~
ほとんどPythonで書かれている(速度を必要とする部分はCが使用されている)が非常に高速に動作する。~

*バージョン番号の付け方 [#m95d7350]
ソフトウェアを公開するときにバージョン番号を付けることがあるかと思います。例えばWindows XPだったら「5.1.2600」です。~
番号の付け方に共通の決まりはないので、ここでは大体の概要について記します。
(加筆修正おねがいします)

**バージョン番号の読み方 [#f5b1db38]
Windows XPのバージョン番号は「5.1.2600」です。これを例に説明します。

-メジャーバージョン~
最初の数字はメジャーバージョンと言います。ここでは「5」です。~
プログラムに大幅な変更(アーキテクチャーの変更、ソースコードの書き直しなど)があったときに変更します。

-マイナーバージョン~
2番目の数字はマイナーバージョンと言います。ここでは「1」です。~
マイナーバージョンはメジャーバージョン程ではない修正のとき変更します。

-リビジョン~
3番目の数字はリビジョンです。ここでは「2600」です。~
リビジョンは、軽微な仕様の変更、バグ修正などで変更します。

-ビルドバージョン~
さらに4番目の数字を付けることがあります。~
これはビルドごとに1ずつ上がります。~
ちなみにリビジョンとビルドバージョンの順番を入れ替えたりすることもあります。

-開発段階~
バージョン番号のあとに開発段階を示す単語を書くことがあります。「beta」、「RC」などです。~
例えばGoogle Chrome 25.0.1364.58 (Beta)などと使います。~
以下によく使うものを示します。

--Alpha版 特に開発初期段階のもの
--Beta版 一通り機能を実装したもの
---Public Beta版 一般公開をして、ユーザーからのフィードバックをもとめるもの
--Dev 開発者向けのプレビュー版
--RC(Release Candidate)版 リリース候補版
--RTM(Release to Manufacturing)版 出荷版
--Stable 安定版

**参考文献 [#o43d43c6]
セマンティックバージョニングという考え方があります。~
これまで何となくバージョン番号を付けてた方は参考にしてもいいかもしれません。

http://semver.org/ ~
(日本語訳 http://samidarehetima.blog9.fc2.com/blog-entry-182.html)