※当サイトの記事には、広告・プロモーションが含まれます。

バージョン管理システム (VCS)とGit

パソコンを修理に出したところ、想像していたより出費が抑えられ、ほっとした今日この頃です。

今回は、gitという分散型バージョン管理システムのことについてです。

バージョン管理システムとは?

バージョン管理システム(Version Control System)とは、コンピュータ上で作成、編集されるファイルの変更履歴を管理するためのシステム。
特にソフトウェア開発においてソースコードの管理に用いられることが多い。

バージョン管理システム - Wikipedia

一般的なバージョン管理システムの流れは、wikipediaさんによると

管理方法

バージョン管理システムでは、ファイルの各バージョンをデータベースに保持しており、このデータベースを一般にリポジトリと呼びます。 

バージョン管理システムの基本的な利用方法は以下の流れになります。

  1. ファイルをリポジトリに登録します。
  2. ファイルをリポジトリからローカル環境に取り出します。(チェックアウト)
  3. ローカル環境で、ファイルに対し変更を行います。
  4. 変更したファイルをリポジトリに書き戻します。(チェックイン)

ファイルがチェックインされると、システムによって「いつ」「誰が」「どんな変更を行った」等が記録され、後から参照できます。

また必要に応じて古い版を取り出すことも出来ます。

バージョン管理システム - Wikipedia

と、流石は、Wikipediaさん、ほとんど説明してくれてます。

15周年を迎えたのは伊達ではないです。

 

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

 バージョン管理の歴史については下記サイトへ 

バージョン管理システムの歴史 - karasuyamatenguの日記

 

 

バージョン管理は、大きく分けて

といったものがあるようです。

 

ローカル・バージョン管理

初期のバージョン管理システムの1つRevision Control System(RCS)が有名。

Mac OS Xオペレーティング・システムでも、開発者ツールをインストールするとrcsコマンドが入っているようです。

このツールは基本的に、リビジョン間のパッチ(ファイル間の差分)の集合を特殊なフォーマットでディスク上に保持するという仕組みで動いているようです。

f:id:ts0818:20160117034335p:plain

 

集中型バージョン管理システム(Concurrent Versions Control System)

他のシステムを使う開発者と共同作業をする必要が出てきて集中型バージョン管理システム(CVCSs)が開発されました。

CVS(Concurrent Versions System)Subversion(SVN)Perforce などがありますが、それらはバージョン管理されたファイルを全て持つ一つのサーバーと、その中心点からファイルをチェックアウトする多数のクライアントからなっています。

長らく、バージョン管理の標準となってました。

f:id:ts0818:20160117034333p:plain

メリット 

  • プロジェクトの他のみんなが何をしているのか、全員がある程度わかります。
  • 管理者が、プロジェクトの運営をしやすい。

デメリット

  • 中央サーバーという単一障害点
  • サーバーの障害で仕事の進行が止まってしまう。
  • 一つの場所にプロジェクトの全体の履歴を持っていると、全てを失うリスクが常に生じます。

 

分散型バージョン管理システム(Distributed Version Control System)

分散型バージョン管理システム(DVCSs)は、サーバーからファイルを出し入れ、修正するだけでなく、リポジトリ(バージョン管理の対象になるファイル、ディレクトリ、更新履歴などの一群)全体をミラーリングします。

DVCS(GitMercurialBazaarDarcs)などがあります。

f:id:ts0818:20160117215423p:plain

メリット

  • サーバーが故障して、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は常にバージョンごとで全ファイルをセットの状態で考えるようです。

バージョンの中で変更がなかったファイルは、既に格納してある、以前の同一のファイルへのリンクを格納するようです。

 

従来のシステムCVSSubversion、Perforce、Bazaar等々)

f:id:ts0818:20160117231144p:plain

 Gitのシステム

f:id:ts0818:20160117231143p:plain

ローカルにリポジトリでプロジェクト全体の構成を保っておけるので、ネットワークがない状態でも作業が進められます。(※アップロードする時はネットワーク環境が必要です。) 

Gitのデータベースにファイルをアップロードする場合、SHA-1ハッシュを利用したチェックが行われるようです。

 

Gitを使うには

Gitを使うには、GitクライアントソフトとGitサーバーの両方が必要です。

 

パソコンにGitクライアントソフトをインストールする必要があります。

Windows環境では、インストーラーのexeファイルをダウンロードして実行してインストールする方法と、chocolateyなどのパッケージ管理ソフトを使ってインストールする方法の2パターンがあるようです。

 

Gitサーバーを用意する方法としては、

  • Gitホスティングサービスを使う
  • 適当なパソコンにGitサーバーを構築する

の2パターンがあるので、どちらかを選択すればOKです。 

Git利用のイメージ図

f:id:ts0818:20160424204236p:plain 

  自分でGitサーバーを構築する方法は下記サイトへ 

WindowsにGitサーバーを立ててみた話

CentOS 7でapache経由のgitサーバーを構築 - ソフトウェアエンジニアリング - Torutk

 

GitHubとは

GitHub(ギットハブ)はソフトウェア開発プロジェクトのための共有ウェブサービスであり、Gitバージョン管理システムを使用する。
Ruby on RailsおよびErlangで記述されており、GitHub社によって保守されている。

最も有名な Git ホスティングサイト。

 

  その他、Gitホスティングサービスについては下記サイトへ

Gitホスティングサービス5選【比較表付き】 | Find Job! Startup

今回はこのへんで。