バージョン管理とGit(version control / Git)

分類
テクノロジ系 ソフトウェア開発管理技術
出る試験
ITパスポート基本情報応用情報
重要度
★★★☆☆

変更の履歴を記録して、前の状態へ戻せるようにする仕組み。Gitは分散型の代表。

もう少し詳しい説明

バージョン管理は、変更の履歴を記録して、いつでも前の状態へ戻せるようにする仕組みです。

何が困るのか

仕組みが無いとどうなるか、から見ます。

ファイルを直すとき、念のため元のものを残しておくことがあります。ファイル名で区別する方法です。

企画書.docx
企画書_修正.docx
企画書_修正2.docx
企画書_最新.docx
企画書_最終版.docx
企画書_最終版_修正.docx

この方法は、3つのことができません。

バージョン管理は、この3つを全部引き受けます。

基本の言葉

試験に出るのは、おおむね次の4つです。

言葉中身
リポジトリ履歴ごと保管する置き場
コミット変更をひとまとめにして履歴に記録する操作
ブランチ本線から分かれた枝。別の作業を並行して進める
マージ枝を本線へ合流させる操作

コミットのときに、何のための変更かを文章で添えます。この文章が履歴に残るので、あとから「この行はなぜこうなっているのか」を追えます。

差分だけを見る

バージョン管理の道具は、2つの版の違いだけを抜き出して見せます。これを差分と呼びます。

1,000行のファイルのうち3行だけ直したなら、その3行だけが並びます。残りの997行を目で追う必要がありません。

何を変えたのか分からないという問題は、これで消えます。

枝分かれと合流

ブランチは、本線をそのままにして、作業用の枝を作る仕組みです。

直している途中のものを本線に混ぜたくない、という場面で使います。枝の上でいくら壊しても、本線は動いているままです。

できあがったらマージで合流させます。ここで、同じ場所を2人が別々に直していた場合があります。どちらを残すか道具には判断できないので、人に知らせて止まります。これがコンフリクト(衝突)です。

コンフリクトは失敗ではありません。黙ってどちらかが消えるより、止めて知らせるほうが安全です。

集中型と分散型

ここが試験でいちばん問われるところです。履歴をどこが持つかで2つに分かれます。

履歴を持つ場所記録するとき代表
集中型サーバ(要求を受け取って、応えを返す側の機械)だけサーバへつなぐ必要があるSubversion、CVS
分散型サーバと各自の手元手元だけで記録できるGit、Mercurial

集中型は、履歴が1か所にあります。分かりやすい代わりに、サーバが止まると記録できません。回線が無い場所でも作業が止まります。

分散型は、各自の手元に履歴の複製を持ちます。手元で何度でも記録してから、区切りのよいところでまとめてサーバへ送ります。サーバが壊れても、誰かの手元に履歴が残っています。

Gitは何なのか

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