バージョン管理システムと言うとSubversionやCVSが有名だが、近年急速にユーザーを増やしているバージョン管理システムに「Git」がある。GitはLinuxカーネルの開発リーダーとして知られるLinus Torvalds氏が中心となって、Linuxカーネルの開発に使用する目的で開発した分散型バージョン管理システムである。2005年に開発が開始されて以来さまざまなプロジェクトでの採用が進み、現在ではPerl 5やRuby on Rails、Android、Wine、X.orgなど、有名な大規模プロジェクトで採用されるに至っている。
本記事では、このGitを使用するのに必要な「分散型バージョン管理システム」の基本的な考え方を紹介するとともに、Gitの導入方法や基本的なGitの使い方について解説する。
|
|
分散バージョン管理システムとは?
GitはLinuxカーネル開発で用いられることを前提に開発されており、次のような特徴を備えている。
- 開発者各自がローカルにリポジトリを持つ「分散型」アーキテクチャを採用
- 高速かつ柔軟にブランチの作成やマージが可能
- Linuxカーネルのような巨大なプロジェクトでも十分な速度で動作
- 変更履歴とともにそのハッシュも保存され、これを検証することで改竄を検出できる
- 主要部分はCで書かれており、各種スクリプト言語から利用できるラッパーも用意されている
- 独自プロトコルのほかWebDAVやrsync、ssh経由でリモートのリポジトリにアクセスできる
この中でもGitの大きな特徴となっているのが「分散型」という点だ。Gitはプロジェクトに関わる各開発者がそれぞれローカルにリポジトリを持ち、必要に応じてリポジトリ間で変更点をやりとりすることによってソースコードなどの管理を行う(図1)。いっぽう、バージョン管理システムとして有名なSubversionやCVSは、1つのリポジトリにすべての開発者がアクセスする「集中型」と呼ばれるアーキテクチャを採用している(図2)。
|
| 図1 各開発者がリポジトリを持つ分散型バージョン管理システム |
|
| 図2 1つのリポジトリにすべての開発者がアクセスする集中型バージョン管理システム |
お詫びと訂正
記事掲載当初、Gitの特徴の1つとして「変更履歴は暗号化されて保存され、改竄ができない」としていましたがこちらは誤りで、実際は変更履歴自体を暗号化して保存しているわけではなく、そのハッシュを保持することで変更履歴の整合性を検出できる、ということでした。また、これに加えてGPG署名を利用することでさらに堅牢にすることも可能です。お詫びして訂正いたします。ご指摘をいただき、ありがとうございました。