GitとSVNの違いとは?IT初心者向けに仕組み・使い分け・現場での確認方法を解説
結論として、Gitは各PCに履歴を持つ「分散型」のバージョン管理システム、SVNはサーバーで履歴を一元管理する「集中型」のバージョン管理システムです。
どちらもソースコードや設定ファイルの変更履歴を管理するために使われますが、保存方式、操作方法、ブランチの扱いやすさ、障害時の影響などが異なります。
IT業務では「どちらが優れているか」だけで判断するのではなく、既存環境やファイルの種類、運用ルールに合わせて使い分けることが大切です。
GitとSVNの違いを一覧で確認
| 比較項目 | Git | SVN |
|---|---|---|
| 正式名称 | Git | Apache Subversion |
| 管理方式 | 分散型 | 集中型 |
| 履歴の保存場所 | 各PCとリモートリポジトリ | 中央サーバー |
| オフラインでのコミット | 可能 | 基本的に不可 |
| ブランチ作成 | 高速で使いやすい | Gitより慎重な運用が必要 |
| 一部フォルダーだけの取得 | 標準運用では不向き | 比較的行いやすい |
| 大容量バイナリーファイル | 追加対策が必要になる場合がある | 運用しやすい場合がある |
| 代表的な用途 | ソフトウェア開発、構成管理 | 既存業務システム、文書・素材管理 |
Gitとは
Gitは、ファイルの変更履歴を管理する分散型バージョン管理システムです。
Gitでは、開発者が自分のPCへリポジトリを複製します。リポジトリとは、ファイル本体と変更履歴を保存する場所のことです。
各PCに履歴があるため、ネットワークへ接続していない状態でも、履歴確認やコミットなどの作業ができます。
Gitでよく使う用語
- リポジトリ:ファイルと変更履歴を保存する場所
- コミット:変更内容を履歴として記録する操作
- ブランチ:作業を分岐させる仕組み
- マージ:分岐した変更内容を統合する操作
- クローン:リモートリポジトリをPCへ複製する操作
- プッシュ:ローカルの変更をリモートへ送る操作
- プル:リモートの変更を取得して反映する操作
SVNとは
SVNは、Apache Subversionという集中型バージョン管理システムです。
変更履歴は中央のSVNサーバーで管理されます。利用者はサーバーから必要なファイルをチェックアウトし、変更後にコミットします。
管理場所が明確なため、集中管理を重視する企業や、古くから運用されている業務システムで使われることがあります。
SVNでよく使う用語
- チェックアウト:サーバーから作業用ファイルを取得する操作
- コミット:変更を中央サーバーへ登録する操作
- アップデート:サーバー上の最新変更を取得する操作
- リビジョン:リポジトリ全体に付けられる変更番号
- ロック:ほかの利用者による同時編集を制限する仕組み
最大の違いは分散型と集中型
Gitは各PCに履歴を持つ
Gitでは、開発者のPCにも基本的な履歴が保存されます。
中央のリモートリポジトリへ接続できない場合でも、ローカルでコミットや差分確認が可能です。通信が復旧した後にプッシュできます。
SVNは中央サーバーで履歴を管理する
SVNでは、履歴の中心がSVNサーバーにあります。
コミットや最新版の取得では、通常はサーバーとの通信が必要です。サーバーへ接続できない場合、作業ファイルの編集はできても、変更の登録ができません。
Gitのコミットとプッシュは別の操作
初心者が特に混乱しやすいのが、Gitのコミットとプッシュの違いです。
- コミット:自分のPC内へ変更履歴を記録する
- プッシュ:記録した変更をリモートリポジトリへ送る
Gitではコミットしただけでは、ほかのメンバーから変更を確認できない場合があります。共有するにはプッシュが必要です。
SVNのコミットは、通常そのまま中央サーバーへの登録になります。この違いを理解していないと、「コミットしたのに相手へ反映されていない」というトラブルが発生します。
ブランチの違い
ブランチとは、本番用のファイルへ直接影響を与えず、別の作業線で開発する仕組みです。
Gitはブランチの作成や切り替えが軽く、機能追加、不具合修正、検証作業などで頻繁に利用されます。
SVNでもブランチは作成できますが、一般的にはリポジトリ内のディレクトリをコピーして管理します。運用ルールが不明確だと、どのブランチが最新なのか分かりにくくなることがあります。
どのような場面で使われるか
Gitが使われやすい場面
- 複数人でのソフトウェア開発
- Webアプリケーション開発
- インフラ設定ファイルの管理
- CI/CDを利用した自動テストや自動配布
- 機能ごとにブランチを分ける開発
CI/CDとは、変更したプログラムのテストや配布を自動化する仕組みです。
SVNが使われやすい場面
- 既存の業務システムを継続保守している現場
- 中央サーバーで厳密に管理したい環境
- 一部のフォルダーだけを取得したい運用
- 設計書や画像などをロックして編集する環境
- Gitへ移行していない社内システム
GitとSVNはどちらを選ぶべきか
| 要件 | 向いている方式 |
|---|---|
| ブランチを頻繁に作成する | Git |
| オフラインでも履歴を登録したい | Git |
| 開発ツールやCI/CDと連携したい | Git |
| 既存のSVN運用を継続する | SVN |
| 特定フォルダーだけ取得したい | SVN |
| 編集前にファイルをロックしたい | SVNが適する場合がある |
新規のソフトウェア開発ではGitが選ばれることが多い一方、既存環境ではSVNが現役で使われている場合もあります。
IT現場でよくあるトラブル例
Gitでコミットしたのに変更が共有されない
ローカルでコミットしただけで、プッシュしていない可能性があります。
対象ブランチとプッシュ状況を確認します。
Gitでプッシュが拒否される
リモート側に、自分のPCへ取り込んでいない変更があると、プッシュを拒否されることがあります。
先にリモートの変更を取得し、競合があれば解消してから再度プッシュします。
SVNでコミットできない
作業コピーが古い、ファイルがロックされている、SVNサーバーへ接続できない、権限がないなどの原因が考えられます。
競合が発生する
競合とは、複数人が同じ部分を変更し、自動的に統合できない状態です。
GitでもSVNでも発生します。自分の判断だけで削除せず、変更者と内容を確認してから修正します。
障害発生時の確認する順番
- GitとSVNのどちらを使用しているか確認する
- 対象リポジトリとブランチ、またはSVNのURLを確認する
- 自分だけの問題か、ほかのメンバーも発生しているか確認する
- ネットワークやVPNへ接続できているか確認する
- 認証情報とアクセス権限を確認する
- 変更状態とエラーメッセージを確認する
- サーバーや管理サービスの障害情報を確認する
原因の切り分け
| 症状 | 主な確認箇所 |
|---|---|
| 自分だけ接続できない | 認証情報、権限、PC設定、VPN |
| 全員が接続できない | サーバー、ネットワーク、サービス障害 |
| 取得はできるが登録できない | 書き込み権限、ブランチ保護、ロック |
| 特定ファイルだけ更新できない | 競合、ロック、ファイル権限 |
| Gitで共有されない | プッシュ忘れ、ブランチ間違い |
Gitをコマンドで確認する方法
現在の変更状態を確認する
git status
変更済みファイル、未追跡ファイル、現在のブランチなどを確認できます。
変更履歴を確認する
git log –oneline
コミット履歴を1行ずつ簡潔に表示します。
リモートリポジトリを確認する
git remote -v
取得先と送信先のURLを確認できます。
変更差分を確認する
git diff
まだコミットしていない変更内容を確認できます。
現在のブランチを確認する
git branch –show-current
作業中のブランチ名が表示されます。
SVNをコマンドで確認する方法
変更状態を確認する
svn status
変更、追加、削除、競合などの状態を確認できます。
作業コピーの情報を確認する
svn info
リポジトリURLやリビジョン番号を確認できます。
差分を確認する
svn diff
ローカルで変更した内容を確認できます。
最新状態へ更新する
svn update
中央サーバーから最新の変更を取得します。未保存の作業がある場合は、差分を確認してから実行しましょう。
GUIで確認する方法
Windowsでは、GitやSVNを画面操作で扱えるクライアントツールも利用されます。
- Git:開発ツールのソース管理画面やGit対応クライアント
- SVN:TortoiseSVNなどのSVNクライアント
GUIでは、変更ファイル、差分、履歴、ブランチ、競合などを視覚的に確認できます。
ただし、トラブル時は画面の表示だけでなく、実行した操作とエラーメッセージを記録することが重要です。
ショートカットキー
利用する開発ツールによって異なりますが、次のショートカットは確認作業で役立ちます。
- Windowsキー+R:「ファイル名を指定して実行」を開く
- Ctrl+Shift+Esc:タスクマネージャーを開く
- Ctrl+C:エラーメッセージやコマンド結果をコピーする
- Ctrl+F:履歴やログ内を検索する
ログの確認方法
GitやSVNの問題では、最初にコマンド画面やクライアントツールへ表示されたエラーを確認します。
次の情報を記録しておくと、原因を調査しやすくなります。
- 実行したコマンドや操作
- エラーメッセージ全文
- 発生日時
- 対象リポジトリ
- Gitのブランチ名またはSVNのURL
- 対象ファイル
- 直前に正常だった操作
イベントビューアーを確認する場面
GitやSVNの競合、ブランチ間違い、コミットミスは、通常イベントビューアーには記録されません。
ただし、次のようなWindows側の問題が疑われる場合は確認します。
- 認証や証明書に関する問題
- ネットワークアダプターの異常
- ファイルシステムのエラー
- GitやSVNクライアントが異常終了する
- WindowsキーとRキーを押す
- eventvwr.mscと入力する
- 「Windowsログ」を開く
- 「アプリケーション」と「システム」を確認する
- 障害発生時刻付近のエラーを探す
初心者がやりがちなミス
- Gitでコミットすれば共有済みだと思う
- 作業ブランチを確認せず変更する
- 最新状態を取得せずに作業を始める
- 競合ファイルを内容確認せず上書きする
- SVNのリポジトリURLとローカルフォルダーを混同する
- パスワードやアクセストークンをリポジトリへ登録する
- 生成ファイルや一時ファイルまで大量に登録する
筆者の現場経験
新人時代、Gitで修正をコミットしただけで作業完了だと思い、チームへ「反映しました」と報告したことがあります。しかし、実際にはプッシュしておらず、ほかのメンバーから変更を確認できませんでした。
また、SVN環境では最新状態へ更新せずに長時間作業し、コミット時に複数の競合が発生した経験があります。
それ以降は、作業前に更新状況と対象ブランチを確認し、作業後は共有先へ反映されたことまで確かめるようにしています。
上司へ報告するポイント
- GitかSVNか
- 対象リポジトリ
- Gitのブランチ名またはSVNのURL
- 実施した操作
- エラーメッセージ全文
- 自分だけか、複数人で発生しているか
- ネットワークとVPNの接続状況
- 業務への影響範囲
- 実施済みの確認内容
エスカレーションするタイミング
- 複数人がリポジトリへ接続できない
- リポジトリや履歴が破損した可能性がある
- アクセス権限の変更が必要
- ブランチ保護やサーバー設定の変更が必要
- 重要な変更を誤って削除、上書き、公開した
- パスワードや秘密鍵を誤って登録した
機密情報を誤ってコミットした場合は、単純にファイルを削除するだけでは履歴に残ることがあります。直ちに管理者やセキュリティ担当へ報告してください。
新人が覚えておくべきポイント
- Gitは分散型、SVNは集中型
- Gitではコミットとプッシュが別の操作
- 作業前に最新状態と作業場所を確認する
- 競合は勝手に上書きせず、変更者と確認する
- エラー全文と実施操作を記録して報告する
関連するIT用語
- バージョン管理システム
- リポジトリ
- コミット
- ブランチ
- マージ
- 競合
- GitHub
- GitLab
- CI/CD
- アクセス権限
よくある質問(FAQ)
GitとGitHubは同じですか?
同じではありません。Gitはバージョン管理システムです。GitHubは、Gitリポジトリを保存・共有し、レビューや課題管理などを行えるサービスです。
SVNは古いので使わないほうがよいですか?
一概にはいえません。新規開発ではGitが適することが多いものの、既存システムやファイル管理の要件によってはSVNが使われ続けています。
Gitはサーバーがなくても使えますか?
ローカルPCだけでも利用できます。ただし、チームで共有する場合は、通常リモートリポジトリを用意します。
GitとSVNを同じ案件で併用できますか?
技術的には可能ですが、管理対象や運用ルールが分かりにくくなります。どのファイルをどちらで管理するか明確に決める必要があります。
Gitで作業前に何を確認すればよいですか?
対象リポジトリ、現在のブランチ、未コミットの変更、リモートとの差分を確認します。作業指示と異なるブランチでないことも重要です。
まとめ
GitとSVNは、どちらもファイルの変更履歴を管理するためのバージョン管理システムです。
Gitは各PCにも履歴を持つ分散型で、ブランチを使った開発や複数人での並行作業に向いています。SVNは中央サーバーで履歴を管理する集中型で、管理場所が分かりやすく、既存の業務環境でも利用されています。
IT初心者は、まずGitでは「コミットとプッシュが別」、SVNでは「コミットすると中央サーバーへ登録される」という違いを覚えましょう。作業前に最新状態と作業場所を確認し、エラーが発生した場合は対象リポジトリ、ブランチ、実行操作、エラーメッセージを整理して報告することが、現場で評価される基本動作です。
