GitとSVNについて
Git:分散型
ローカルPCにローカルリポジトリを持つ
開発手順
リモートリポジトリをクローンしてローカルリポジトリを作成
↓
改修後、ローカルリポジトリにコミット
↓
リモートリポジトリにプッシュ
・メリット
ローカルリポジトリでソースコードを管理するため、
・「ブランチを切り替える」
・「コミットする」
・「差分を比較する」
・「マージする」
といった操作の度にリモートリポジトリアクセスする必要がない
SVN:集中型
サーバーのリモートリポジトリだけがソースのバージョンを管理
開発手順
リモートリポジトリにアクセス
↓
ローカルPCにしてしたバージョンのソースをダウンロード(チェックアウト)
↓
改修後、リモートリポジトリにコミット
Git: 分散型バージョン管理システム
・Gitの最大の特徴は、分散型であること。
これにより、開発の柔軟性と効率性が飛躍的に向上する。
ローカルPCにローカルリポジトリを持つことの意義
・オフライン作業の可能化:
インターネット接続がない環境でも、コミット、ブランチの切り替え、
差分確認といったほとんどのバージョン管理作業が可能。
これは、SVNのような集中型システムでは考えられない大きな利点。
・高速な操作:
ローカルリポジトリに対する操作は非常に高速。
リモートリポジトリとの通信が必要ないため、ネットワークの遅延に左右されない。
大規模なプロジェクトでもサクサクと作業を進められる。
・実験的な開発の促進:
気軽にブランチを作成し、新しい機能を試したり、バグ修正を行ったりできる。
本流の開発に影響を与えることなく、独立した環境で試行錯誤できるため、
より活発な開発が促される。
開発手順の補足
1. リモートリポジトリをクローンしてローカルリポジトリを作成:
git clone [リモートリポジトリのURL] コマンドを使用。
これにより、リモートリポジトリの履歴を含む完全なコピーがローカルに作成。
2. 改修後、ローカルリポジトリにコミット:
変更をステージングエリアに追加し (git add . など)、
その後 git commit -m "コミットメッセージ"でローカルリポジトリに記録。
この時点では、変更はまだリモートには反映されていない。
3. リモートリポジトリにプッシュ:
git push コマンドを使用することで、
ローカルリポジトリのコミットをリモートリポジトリに送信し、共有。
Gitのその他の特徴とメリット
ブランチとマージの概念:
Gitはブランチの作成とマージを非常に容易に行えるように設計されている。
これにより、複数の開発者が同時に異なる機能を開発したり、
バグ修正と新機能開発を並行して進めたりすることが容易になる。
特に、Pull Request(GitHubなど)やMerge Request(GitLabなど)といった機能は、
コードレビューを促進し、品質の高い開発を支援する。
強力な履歴管理:
コミット履歴は改ざんが困難な構造になっており、信頼性の高い履歴管理が可能。
また、ログの参照や特定のコミットへの戻り(Revert)なども柔軟に行える。
高い柔軟性と拡張性:
スクリプトによる自動化や、さまざまな外部ツールとの連携が容易。
SVN: 集中型バージョン管理システム
・SVNは、Gitが普及する以前は主流であった集中型のバージョン管理システム。
サーバーのリモートリポジトリだけがソースのバージョンを管理することの意義
シンプル性:
バージョン管理の中心がサーバーに集約されているため、
Gitに比べて概念的に理解しやすい側面がある。
単一の真実:
すべての履歴が中央サーバーに存在するため、
どの開発者も常に最新のコードベースにアクセスできる。
開発手順の補足
1. リモートリポジトリにアクセス:
開発者は常に中央サーバーに接続して作業を行う。
2. ローカルPCに特定のバージョンのソースにチェックアウト:
svn checkout [リポジトリURL] [ローカルパス] コマンドを使用。
これは、作業用のコピーを取得するイメージ。
3. 改修後、リモートリポジトリにコミット:
svn commit -m "コミットメッセージ" コマンドを使用。
この操作は直接リモートリポジトリに対して行われ、変更がサーバーに反映される。
コミットする前に、他の開発者の変更と競合しないか (svn update) を確認する必要がある。
SVNのその他の特徴とメリット
アクセスの制御:
中央サーバーでユーザー認証やアクセス権限を厳密に管理できる。
LFS(Large File Support)が不要:
大容量ファイルを扱う場合、GitではLFSなどの拡張機能が必要になることがあるが、
SVNでは通常、それほど考慮する必要がない。
GitとSVNの使い分け
プロジェクトの規模、開発チームの文化、要件によって使い分けられる。
Gitが適しているケース:
分散開発、OSS開発、アジャイル開発など、柔軟性と独立性が求められるプロジェクト
大規模なチームでの並行開発
オフラインでの作業が多い環境
SVNが適しているケース:
比較的小規模で、厳格な集中管理を好むプロジェクト
既存のシステムがSVNで構築されており、移行コストが大きい場合