パソコンを修理に出したところ、想像していたより出費が抑えられ、ほっとした今日この頃です。
今回は、gitという分散型バージョン管理システムのことについてです。
バージョン管理システムとは?
バージョン管理システム(Version Control System)とは、コンピュータ上で作成、編集されるファイルの変更履歴を管理するためのシステム。
特にソフトウェア開発においてソースコードの管理に用いられることが多い。
一般的なバージョン管理システムの流れは、wikipediaさんによると
管理方法
バージョン管理システムでは、ファイルの各バージョンをデータベースに保持しており、このデータベースを一般にリポジトリと呼びます。
バージョン管理システムの基本的な利用方法は以下の流れになります。
- ファイルをリポジトリに登録します。
- ファイルをリポジトリからローカル環境に取り出します。(チェックアウト)
- ローカル環境で、ファイルに対し変更を行います。
- 変更したファイルをリポジトリに書き戻します。(チェックイン)
ファイルがチェックインされると、システムによって「いつ」「誰が」「どんな変更を行った」等が記録され、後から参照できます。
また必要に応じて古い版を取り出すことも出来ます。
と、流石は、Wikipediaさん、ほとんど説明してくれてます。
15周年を迎えたのは伊達ではないです。
バージョン管理システムの歴史
⇩ バージョン管理の歴史については下記サイトへ
・バージョン管理システムの歴史 - karasuyamatenguの日記
バージョン管理は、大きく分けて
- ローカル・バージョン管理システム
- 集中型バージョン管理システム
- 分散型バージョン管理システム
といったものがあるようです。
ローカル・バージョン管理
初期のバージョン管理システムの1つRevision Control System(RCS)が有名。
Mac OS Xオペレーティング・システムでも、開発者ツールをインストールするとrcsコマンドが入っているようです。
このツールは基本的に、リビジョン間のパッチ(ファイル間の差分)の集合を特殊なフォーマットでディスク上に保持するという仕組みで動いているようです。
集中型バージョン管理システム(Concurrent Versions Control System)
他のシステムを使う開発者と共同作業をする必要が出てきて集中型バージョン管理システム(CVCSs)が開発されました。
CVS(Concurrent Versions System)、Subversion(SVN)、Perforce などがありますが、それらはバージョン管理されたファイルを全て持つ一つのサーバーと、その中心点からファイルをチェックアウトする多数のクライアントからなっています。
長らく、バージョン管理の標準となってました。
メリット
- プロジェクトの他のみんなが何をしているのか、全員がある程度わかります。
- 管理者が、プロジェクトの運営をしやすい。
デメリット
- 中央サーバーという単一障害点
- サーバーの障害で仕事の進行が止まってしまう。
- 一つの場所にプロジェクトの全体の履歴を持っていると、全てを失うリスクが常に生じます。
分散型バージョン管理システム(Distributed Version Control System)
分散型バージョン管理システム(DVCSs)は、サーバーからファイルを出し入れ、修正するだけでなく、リポジトリ(バージョン管理の対象になるファイル、ディレクトリ、更新履歴などの一群)全体をミラーリングします。
DVCS(Git、Mercurial、Bazaar、Darcs)などがあります。
メリット
- サーバーが故障して、DVCSがそのサーバーを介して連携していたとしても、クライアント・リポジトリの一つをサーバーにコピーすれば修復できます。
- クライアントの作業が、全データの完全バックアップを保持してる状態と言えます。
- 複数のリモート・リポジトリで作業ができ、異なるグループで同じプロジェクトを共同して進められます。
デメリット
- 管理が煩雑になります。
- プロジェクトの規模が大きいとデータの履歴が大量になり、履歴全体のダウンロードの時間とディスク容量が莫大なものに。
- プロジェクトに圧縮が難しいファイルが多数ある場合の保管に関しての容量問題があります。
ミラーリング 【 mirroring 】 ミラー化 / ディスクミラーリング / disk mirroring
ミラーリングディスク / ミラーディスク
ミラーリングとは、データの複製を別の場所にリアルタイムに保存すること。
通常は、ハードディスクに記録する際に2台以上のディスクを用意し、全部のディスクに同じデータを書き込むことで信頼性を上げることを言う。
ディスクの冗長構成に関する規格であるRAIDでは、RAID-1として規定されている。
また、データをネットワーク上の他のコンピュータにコピーすることもミラーリングという。コンピュータに障害が起きた時でも、別のコンピュータからデータのコピーを取り寄せれば復旧できる。
また、Webサーバなどはミラーリングしたサーバを公開して負荷分散を図ったり、ネットワーク上の距離が近いコンピュータからデータを取り寄せることによってデータ転送に要する時間を短縮することができる。
Gitとは
プログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムである。
Linuxカーネルのソースコード管理に用いるためにリーナス・トーバルズによって開発され、それ以降ほかの多くのプロジェクトで採用されている。
Linuxカーネルのような巨大プロジェクトにも対応できるように、動作速度に重点が置かれている。
Gitが作られた経緯
Linuxのソース管理に使っていたBitKeeperが、2005年4月に無償提供を止めることを発表し、商用版のBitKeeperを使うか(商用版を使うとしても競合ツールの開発に参加しないことが要求された)、別のバージョン管理システムに移行するか、無償提供の期限2005年7月までに決めなければならなくなったため、Gitプロジェクトが開始し、2005年4月7日頃に最初のプロトタイプが作成されたようです。
2005年12月21日に初版がリリースされたようなので、開発のスピード驚異的です。
BitKeeper無償提供停止の原因
アンドリュー・トリジェル(Andrew Tridgell)がプロプラエタリなソフトウェアであるBitKeeperのプロトコルをリバースエンジニアリングしたことに対し、BitKeeperの著作者であるLarry McVoy がこれをライセンス違反であるとして、BitKeeperの無料提供を止めたらしいです。
Gitの特徴
Gitは常にバージョンごとで全ファイルをセットの状態で考えるようです。
バージョンの中で変更がなかったファイルは、既に格納してある、以前の同一のファイルへのリンクを格納するようです。
従来のシステム(CVS、Subversion、Perforce、Bazaar等々)
Gitのシステム
ローカルにリポジトリでプロジェクト全体の構成を保っておけるので、ネットワークがない状態でも作業が進められます。(※アップロードする時はネットワーク環境が必要です。)
Gitのデータベースにファイルをアップロードする場合、SHA-1ハッシュを利用したチェックが行われるようです。
Gitを使うには
Gitを使うには、GitクライアントソフトとGitサーバーの両方が必要です。
パソコンにGitクライアントソフトをインストールする必要があります。
Windows環境では、インストーラーのexeファイルをダウンロードして実行してインストールする方法と、chocolateyなどのパッケージ管理ソフトを使ってインストールする方法の2パターンがあるようです。
Gitサーバーを用意する方法としては、
- Gitホスティングサービスを使う
- 適当なパソコンにGitサーバーを構築する
の2パターンがあるので、どちらかを選択すればOKです。
Git利用のイメージ図
⇩ 自分でGitサーバーを構築する方法は下記サイトへ
・CentOS 7でapache経由のgitサーバーを構築 - ソフトウェアエンジニアリング - Torutk
GitHubとは
GitHub(ギットハブ)はソフトウェア開発プロジェクトのための共有ウェブサービスであり、Gitバージョン管理システムを使用する。
Ruby on RailsおよびErlangで記述されており、GitHub社によって保守されている。
最も有名な Git ホスティングサイト。
⇩ その他、Gitホスティングサービスについては下記サイトへ
・Gitホスティングサービス5選【比較表付き】 | Find Job! Startup
今回はこのへんで。