DXOでは、開発のバージョン管理にGitを利用しています。
以前はSVNで管理していましたが、プロジェクトメンバーの増加や大規模な開発もスムーズに対応できるようにより機能の備わっているGitへと移行しました。
Gitの便利さは感じつつもSVNとは違うバージョン管理に日々(恐怖で)ドキドキしています。
今回はそんなドキドキを鎮めるため、Gitについて調べたのでまとめてみようと思います。
この記事では、基本的な「Gitとは?」といったGitの概念について、SVNと比較しながら説明していきます。
Git初心者の方、Gitにドキドキさせらている方は是非ご覧ください。
Gitとは?
Gitとは、「バージョン管理システム」のひとつです。Gitを利用すれば、ファイルの変更履歴を保存することはもちろん、以前のバージョンにも戻す、変更の差分を確認する、複数人で同時変更するetc.といった操作も簡単にできるようになります。
【バージョン管理システム】
ファイルを「いつ」「誰が」「どんな変更をした」といった情報を管理する仕組みのこと。大きく分けて分散型と集中型の2種類がある。
SVNとは?
バージョン管理システムはGitのみではありません。
代表的なバージョン管理システムとして、もうひとつ挙げられるのが「SVN(Subversion)」です。
DXOでも以前はSVNを利用してバージョン管理をしていました。
代表的なバージョン管理システムとして、もうひとつ挙げられるのが「SVN(Subversion)」です。
DXOでも以前はSVNを利用してバージョン管理をしていました。
補足:GitHub、GitLabとは?
Gitについて調べていると、GitHubやGitLabといったワードを目にすると思います。
これらは「Gitを活用したWebサービス」であり、Gitとは別物です。
後述するリモートリポジトリの提供、ファイルやファイルの変更履歴等をオンラインで保管してくれます。
GitHubやGitLabのようなサービスを利用することで、リアルタイムでファイルやファイルの変更履歴を見ることができるため、チーム開発をスムーズに進めることができます。
DXOでは、GitLabを使用して日々の開発に勤しんでいます。
<各サイトはコチラより>
GitHub:https://github.co.jp/
GitLab:https://about.gitlab.com/ja-jp/
Gitの特徴
Gitの最たる特徴は「分散型バージョン管理システム」である点です。分散型バージョン管理システムとは、複数のリポジトリでファイルのバージョンを管理する仕組みです。
開発者は共同リポジトリからコピーしたリポジトリを自分のパソコン上に持つことができ、それぞれのリポジトリで変更履歴を管理していきます。
【リポトジリ】
ファイルやファイルの変更履歴を保管している場所
図1
分散型バージョン管理システムを利用した基本的な開発の流れは次の通りです。
- ファイルを変更をする
- ファイルの変更内容を個人のリポジトリに登録する
- 個人リポジトリに登録した内容を共同リポジトリへ登録する
- 他の人の変更した内容を共同リポジトリから個人リポジトリへ取り込む
<メリット> ■自分の変更は必ず管理される
変更箇所が被ってしまう場面は多々あります。
分散型以外のバージョン管理では、同じ箇所を同時に変更すると、他の人の変更内容を消してしまったり、自分の変更が消えたり、競合が発生してしまいます。
分散型バージョン管理システムであれば、個人のリポジトリに変更内容を登録することができるため、他の人と同じ箇所を変更しても競合するこなく、自分の変更内容を管理することができます。
※共同リポジトリへ登録する際に、変更箇所が被っていた場合は競合は発生します。
【競合】
複数人が同じ箇所を変更した場合に、どの記述を優先したらいいか分からない状態です。コンフリクトともいいます。
■オフラインでも変更を管理することができる
個人のパソコン上に共同リポジトリをコピーしたリポジトリを持っているため、ネットワークに繋がっていなくても自分の変更内容を登録することができます。
※共同リポジトリへ登録する場合はネットワークが必要です。
■個人ポジトリが共同のリポジトリのバックアップになる
繰り返しになりますが、分散型バージョン管理では個人のパソコン上に共同リポジトリをコピーしたリポジトリを持ちます。
個人リポジトリの数だけ共同リポジトリのバックアップがあり、万が一共同リポジトリが何らかの障害の影響を受けたとしても復元することが容易です。
<デメリット> ■仕組みがやや複雑である
分散型バージョン管理の構造の把握、概念的な理解や操作方法など覚えることは多いです。
また運用ルールを固めておかないと、雑然としたバージョン管理になってしまいます。
SVNは何型?
SVNは「集中型バージョン管理システム」です。
集中型バージョン管理システムとは、1個のリポジトリ設け、そこへ複数人でアクセスして同時に開発を行うことを実現する仕組みです。
開発者は共同リポジトリからソースコードを持ってきて編集し、編集が終わったら共同リポジトリに直接反映します。
図2
集中型バージョン管理システムを利用した、基本的な開発の流れは次の通りです。
<メリット> ■シンプルな仕組み
集中型バージョン管理は、1個のリポジトリに対し変更を登録していくというシンプルで分かりやすい仕組みです。
<デメリット> ■自分の変更が必ずしも管理されるわけではない
SVNでは共同リポジトリをメンバー全員で編集するため、競合が起こりやすくなります。
競合が発生した場合は、その場で競合を解決する必要があり、他の人の変更を優先すれば自分の変更や変更履歴は残りません。
■自分の変更が他の人にも影響する
変更の登録は共同リポジトリで行うため、即時メンバー全員に共有されます。そのため、お試しで書いた変更や未完成な状態の変更の登録は他の人に大きな影響を与えます。
■オフラインだと変更を管理できない
変更の登録は共同リポジトリで行うため、ネットワークが不可欠です。
SVNは「集中型バージョン管理システム」です。
集中型バージョン管理システムとは、1個のリポジトリ設け、そこへ複数人でアクセスして同時に開発を行うことを実現する仕組みです。
開発者は共同リポジトリからソースコードを持ってきて編集し、編集が終わったら共同リポジトリに直接反映します。
図2
集中型バージョン管理システムを利用した、基本的な開発の流れは次の通りです。
- ファイルを変更をする
- 変更した内容を登録する
- 他の人の変更内容を取り込む
<メリット> ■シンプルな仕組み
集中型バージョン管理は、1個のリポジトリに対し変更を登録していくというシンプルで分かりやすい仕組みです。
<デメリット> ■自分の変更が必ずしも管理されるわけではない
SVNでは共同リポジトリをメンバー全員で編集するため、競合が起こりやすくなります。
競合が発生した場合は、その場で競合を解決する必要があり、他の人の変更を優先すれば自分の変更や変更履歴は残りません。
■自分の変更が他の人にも影響する
変更の登録は共同リポジトリで行うため、即時メンバー全員に共有されます。そのため、お試しで書いた変更や未完成な状態の変更の登録は他の人に大きな影響を与えます。
■オフラインだと変更を管理できない
変更の登録は共同リポジトリで行うため、ネットワークが不可欠です。
Gitで意識しておきたい4つのエリア
Gitには「リモートリポジトリ」「ローカルリポジトリ」「インデックス」「ワークツリー」の4つのエリアがあります。この4つのエリアのなかで、ファイルの変更作業や変更した情報の登録、共有といった操作を行います。
図3
➀リモートリポジトリ
インターネット上に存在します。
ファイルやファイルの変更内容を保存しておく場所です。
※図1、図2の共同リポジトリに該当
➁ローカルリポジトリ
ローカル環境(自分のPC)に存在します。
ファイルやファイルの変更内容を保存しておく場所です。
※図1の、共同リポジトリからコピーしたリポジトリに該当
➂インデックス
ローカル環境(自分のPC)に存在します。
ローカルリポジトリへコミットするファイルをいったん登録する場所です。
このスペースがあるおかげで、変更したファイルの中からコミットに含めたい変更を選別することができます。
➃ワークツリー
ローカル環境(自分のPC)に存在します。
実際にファイルを追加したり、削除したり、修正したりする作業場です。
SVNだと?
図4
SVNは、リモートリポジトリとワーキングコピーのみで構成されています。
「ワーキングコピー」というのが実際の作業場で、Gitでいうワークツリーと同じポジションです。
SVNは、リモートリポジトリとワーキングコピーのみで構成されています。
「ワーキングコピー」というのが実際の作業場で、Gitでいうワークツリーと同じポジションです。
最後に
今回は、SVNとも比較しつつGitについて解説してみました。Gitを利用すれば、SVNのときにはできなかった柔軟なバージョン管理も可能になり、実際とても便利だと感じています。
しかし、いろいろなことができる分、少し複雑です。
Gitの仕組みをきちんと理解して、正しくバージョン管理をできるようにしていきたいですね。
次回は実際のGitの操作ついても調べてまとめてみたいと思います。
<参考サイト様>
サル先生のGit入門〜バージョン管理を使いこなそう〜
第2章 バージョン管理の基本概念