バージョン管理とGit(version control / Git)
変更の履歴を記録して、前の状態へ戻せるようにする仕組み。Gitは分散型の代表。
もう少し詳しい説明
バージョン管理は、変更の履歴を記録して、いつでも前の状態へ戻せるようにする仕組みです。
何が困るのか
仕組みが無いとどうなるか、から見ます。
ファイルを直すとき、念のため元のものを残しておくことがあります。ファイル名で区別する方法です。
企画書.docx
企画書_修正.docx
企画書_修正2.docx
企画書_最新.docx
企画書_最終版.docx
企画書_最終版_修正.docx
この方法は、3つのことができません。
- どれが本当に新しいのか分からない。 「最終版」より「最新」のほうがあとだったかもしれません
- 何を変えたのか分からない。 2つを開いて目で比べることになります
- 2人で同時に直せない。 それぞれが自分のファイルを作ると、あとで合わせられません
バージョン管理は、この3つを全部引き受けます。
基本の言葉
試験に出るのは、おおむね次の4つです。
| 言葉 | 中身 |
|---|---|
| リポジトリ | 履歴ごと保管する置き場 |
| コミット | 変更をひとまとめにして履歴に記録する操作 |
| ブランチ | 本線から分かれた枝。別の作業を並行して進める |
| マージ | 枝を本線へ合流させる操作 |
コミットのときに、何のための変更かを文章で添えます。この文章が履歴に残るので、あとから「この行はなぜこうなっているのか」を追えます。
差分だけを見る
バージョン管理の道具は、2つの版の違いだけを抜き出して見せます。これを差分と呼びます。
1,000行のファイルのうち3行だけ直したなら、その3行だけが並びます。残りの997行を目で追う必要がありません。
何を変えたのか分からないという問題は、これで消えます。
枝分かれと合流
ブランチは、本線をそのままにして、作業用の枝を作る仕組みです。
直している途中のものを本線に混ぜたくない、という場面で使います。枝の上でいくら壊しても、本線は動いているままです。
できあがったらマージで合流させます。ここで、同じ場所を2人が別々に直していた場合があります。どちらを残すか道具には判断できないので、人に知らせて止まります。これがコンフリクト(衝突)です。
コンフリクトは失敗ではありません。黙ってどちらかが消えるより、止めて知らせるほうが安全です。
集中型と分散型
ここが試験でいちばん問われるところです。履歴をどこが持つかで2つに分かれます。
| 履歴を持つ場所 | 記録するとき | 代表 | |
|---|---|---|---|
| 集中型 | サーバ(要求を受け取って、応えを返す側の機械)だけ | サーバへつなぐ必要がある | Subversion、CVS |
| 分散型 | サーバと各自の手元 | 手元だけで記録できる | Git、Mercurial |
集中型は、履歴が1か所にあります。分かりやすい代わりに、サーバが止まると記録できません。回線が無い場所でも作業が止まります。
分散型は、各自の手元に履歴の複製を持ちます。手元で何度でも記録してから、区切りのよいところでまとめてサーバへ送ります。サーバが壊れても、誰かの手元に履歴が残っています。
Gitは何なのか
Gitは、分散型のバージョン管理システムです。いまの開発では、これが広く使われています。
混ざりやすいところを分けておきます。
- Git … 仕組みそのもの。手元のパソコンで動くソフトウェア
- GitHub、GitLab … Gitのリポジトリをインターネット上に置かせてくれるサービス
GitHubはGitではありません。 Gitを使うのに、GitHubは要りません。手元だけでも動きます。
Gitが広まった理由は、枝を作るのが軽いところにあります。思いつきで枝を作って、要らなくなったら捨てる、という使い方ができます。
開発の進め方を支えている
バージョン管理は、それ自体が目的の道具ではありません。ほかの進め方の土台になっています。
継続的インテグレーション(書いた変更を頻繁に統合し、そのつど自動でビルドとテストを行う進め方)は、全員の変更が1か所に集まっていることが前提です。集まる場所がリポジトリです。
アジャイル開発(短い間隔で動くものを作って試す進め方)も、小さく変えて、まずかったら戻すことが前提になります。戻せる仕組みがないと、小さく変える意味が薄れます。
試験ではこう出る
科目A(旧・午前)のソフトウェア開発管理技術で出ます。ITパスポートでも出ます。
いちばん多いのは、集中型と分散型の違いを選ばせる問題です。「各開発者がリポジトリの複製を持つ」が分散型、「リポジトリをサーバで一元管理する」が集中型です。Gitは分散型、Subversionは集中型という組合せも問われます。
バージョン管理の目的を選ばせる形も出ます。「変更の履歴を記録し、任意の時点の状態を再現できるようにする」が答えの向きです。誤答には、最新の状態だけを保つという書き方が並びます。履歴を残さない仕組みは、バージョン管理ではありません。
応用情報では、ブランチとマージの使い方や、継続的インテグレーションとの関係まで踏み込みます。CIが動くために何が要るか、という問いの中にバージョン管理が出てきます。
GitとGitHubの区別も、落としやすいところです。GitHubは置き場を貸すサービスで、仕組みそのものではありません。
関連する用語
- 継続的インテグレーション
- 変更を頻繁に統合して自動で確かめる進め方。バージョン管理がないと成り立たない
- 統合開発環境(IDE)
- 開発の道具をまとめたソフトウェア。バージョン管理の操作が組み込まれている
- アジャイル開発
- 短い間隔で作って試す進め方。小さく変えて戻せることが前提になる
- DevOps
- 開発と運用をつなぐ取り組み。何を本番へ出したかを履歴で追える必要がある
- 構成管理
- 何がどの版なのかを管理する活動全体。バージョン管理はその中の仕組み
ミニクイズ
分散型のバージョン管理システムの特徴として、最も適切なものはどれか。
正解は 4番:各開発者の手元にも履歴の複製が置かれるため、サーバにつながっていなくても変更を記録できる
分散型は、サーバだけでなく各開発者の手元にも履歴の複製を置きます。記録のたびにサーバへつなぐ必要がなく、手元で何度でも記録してから、まとめて送れます。Gitがその代表です。履歴をサーバだけが持つのは集中型(SubversionやCVS)の特徴です。最新だけを上書きするのはバージョン管理ではありません。編集できる人を1人に限るのはロック方式で、集中型で使われることのある運用のしかたです。
この分野をまとめて解く → システム開発とユーザーインタフェースのミニテスト(全40問)
最終更新:2026-11-05