バージョン管理システム

■バージョン管理

バージョン管理とはソースやデータの状態を管理することです。
	
●最も単純なバージョン管理方法
	最も単純なバージョン管理はバックアップを取ることです。
	プロジェクトを変更する前に、コピーをとります。
	もし、作業中に変更を失敗して、変更前に戻したい場合は
	変更前のコピーを使用して作業を再開します。

	・バックアップによるバージョン管理の手順
		①画像Aを修正する場合、画像Aのコピー画像A-1を作成する
		②画像Aで変更作業行っていき、修正ミスに気づく
		③修正中の画像Aを削除して画像A-1を画像Aにリネームする
		④画像Aのバックアップとして再度コピーをとり、作業を再開する

	バックアップをとるバージョン管理の方法は単純ですが、以下の問題が発生します。
		・バックアップを取る頻度によるが数が増えすぎると管理しづらい
			バックアップアップを取る毎にファイルが増えるので、
			どのような状態のバックアップかどうかをメモしておかないと
			各バックアップファイルの状態が分からなくなります。

		・複数人で開発の場合は管理できない
			バックアップ方法は個人の開発で行われることが多く、
			プロジェクト全体の管理になると難易度が更に上がります。
			バックアップの方法でプロジェクトを管理する場合は、
			プロジェクトの統合担当を決めて、その人に毎日ファイルを預けます。
			統合担当は他のメンバーの完成物をもらい
			バックアップをとった上でプロジェクトに統合します。
			統合は大変な作業なので、担当になった人は
			スケジュールの中に統合用時間を設ける必要があります。
			また、この方法では統合時に衝突(同じ箇所を修正する)していた場合は
			その部分のマージ(融合)するのにかなりの時間をとられますので、
			作業箇所の話し合いをしっかりと行わなければいけません。

■バージョン管理システム

バックアップによるバージョン管理問題を解決するために開発されたソフトウェアが
バージョン管理システムです。
このソフトを使用するで、多人数で行うプロジェクトのファイル管理や、統合作業を楽にし、
効率の良い開発を行うことができるようになります。

●バージョン管理の基本
	・リポジトリ
		バージョン管理は特定の場所でプロジェクトの開発ファイル全てを管理します。
		この全てのファイルを管理している場所のことをリポジトリと呼びます。
		リポジトリの内部には通常のハードディスクと同じように
		「ディレクトリツリー」と呼ばれるファイル階層の構造が存在します。
		ディレクトリツリーは最上位にフォルダがひとつ存在し、
		そのフォルダの中にフォルダやファイルが格納されています。
		このリポジトリへのアクセスはバージョン管理システムを通してしかできません。
		pgtheory_0023チェックアウト
		バージョン管理システムを利用して開発を行う場合
		開発者の最初の行動はチェックアウトです。
		チェックアウトとはリポジトリにあるファイルを
		自分で開発できる環境(自分のPC等)にコピーします。
		チェックアウトはある程度の期間(作業に区切りができた時や朝一と昼食後等)毎に行い
		自分の開発環境を常に最新の状態にしておきます。
	
		pgtheory_0024
	
		開発者はコピーしたファイルの修正や新しいファイルの追加を行いますが、
		この時点では開発者側の修正が完了しただけで、リポジトリの内容は変わっていません。
		リポジトリを変更するにはこの後説明するコミットという作業を行う必要があります。

	・コミット
		コミットとは自分の開発環境内の内容をリポジトリに反映することです。
		チェックアウトしたファイルを変更しても開発側しか変更されておらず
		リポジトリの内容は変わっていません。
		なので、修正、追加を行ったら必ずコミットを行い、リポジトリの内容を変更します。
		コミットする内容は修正を行ったファイルだけで、全てコミットする必要はありません。
		修正、または追加を行ったファイルのみをコミットします。
		コミットはリポジトリを変更する内容の全てで必要なので、
		ファイルの修正や追加だけでなく、削除の場合でもコミットは必要です。
	
		pgtheory_0025ログ
		ログとはファイルをコミットする際に書き込めるメモのことです。
		書き込んだログはコミットと同時にリポジトリに登録されるので、
		全ての開発者が確認することができます。
		コミットされた内容を自分を含めた開発者に知らせることができるので、
		ログを確認するだけでプロジェクトの状況をある程度把握することができます。

	・マージ
		複数の開発者が同じファイルを同時に修正していた場合に
		バージョン管理ソフトはできる限り同時に反映しようとします。
		この同じファイルに対する複数の変更を取り込むことをマージといいます。

	・競合
		競合はバージョン管理ソフトがマージすることができないと判断した
		ファイルの重複部分のことです。
		競合が起こった際の解決方法は「競合部分を手動で修正する」
		「どちらかの修正を一方的に受け入れる」のどちらかになります。

●バージョン管理ソフト
	・SVN(TortoiseSVN)
		SVN(subversion)はバージョン管理システムとしてシェア率の高い
		バージョン管理のソフトウェアです。
		近年はGitのシェア率が上がってきていますが、使用している企業は多く、
		WindowsではTortoiseSVNと呼ばれるソフトが使用されています。

	・Git
		SVNに変わって注目されているバージョン管理ソフトウェアで
		一番の特徴としてリポジトリが二つ用意されています。
		一つはSVNと同様に全ファイルを管理するためのリポジトリ、
		もう一つは各開発者が個々にもつローカルのリポジトリです。

	・SVNとGit
		SVN、Gitともに使用している企業はあるのでどちらを使用した方がいいとは
		言い切れませんがシステムはSVNの方がシンプルなので、
		バージョン管理システムを試したいということならSVNがやりやすいと思います。
		ただ、ソフトウェア開発ではバージョン管理ソフトを使うことは間違いなので、
		どちらか使用できるようになるのは必須です。