CVS/SVNとの違い(1/2)
- CSV/SVNは集中
- Gitは分散
- リポジトリはどこにでも置ける(開発PC/サーバ)
- 通常はマスターとなるリポジトリをサーバに置く
※GitHubはGitリポジトリのホスティングサービス
CVS/SVNとの違い(2/2)
- CVS/SVNはファイル単位での履歴管理
- Gitはプロジェクト全体での履歴管理
個人的にはこの違いに最もとまどった!
Gitの特徴
- SVNのチェックアウトに相当する機能はない
※checkoutという操作はあるが、SVNとは機能が異なる -
簡単に衝突する
→Gitではマージが日常的に発生します!
重要な機能・コミット
- プロジェクトの状態を記録する
- Gitは乱暴に言えばコミットの集合体
- コミットには前後関係がある
重要な機能・ブランチ
- ある状態から派生した別のコミットの集合
- まさに、枝分かれのイメージ
- 開発はブランチをうまく使って進めていく
典型的なブランチ戦略の概要
- アプリの「正」となる状態のブランチを1つ定める
mainと名付けることが多い - 開発者はタスク毎にmainから派生したブランチを作り、そこで作業する
- 開発が完了したら、管理者がmainに開発用ブランチをマージする
GitHubはプルリクエスト、GitLabはマージリクエストを作成する
ブランチ戦略の利点
- 開発者用のブランチは開発者の自由!
- いつでもコミットできるので、セーブポイントを作れる
- 実験するときなど、自分のブランチを更に派生させられる
- ブランチ同士を比較することで差分比較が簡単
- ネットワークがない状態でも作業可能
基本的にはローカルPCにも全履歴が保持されるため
マージ
- Gitにはmergeというコマンドがあり、別のブランチの修正を取り込むことが可能
- 同じファイルに修正が入っている場合・・・
- 同一行でなければ自動でうまいことマージ
- 同一行に修正があった場合は衝突。この場合は手動で解決する必要あり
ここで疑問が生じませんか?
・・・そんなにマージが頻繁に起きるの、怖くない?
怖いです!!
最後に
- 次回はマージの対する考え方を話します
- 確実に言えるのは、Gitは大規模開発の運用でも有用 ということ
LinuxのソースコードはGit管理されています!