【分散リポジトリ】分散リポジトリ(distributed repository) について

バージョン管理システム

[1] 集中管理方式(集中型)
 => 中央集約リポジトリ(centralized repository)

[2] 分散管理方式(分散型)
 => 分散リポジトリ(distributed repository)

 * 違いについては、以下の図をみれば、分かりやすい

[1] 集中管理方式(集中型)

 * サーバ上でリソースを集中して管理する方式
http://image.itmedia.co.jp/ait/articles/0901/14/r1301.jpg

[2] 分散管理方式(分散型)

 * サーバ上のリポジトリ以外にも各開発者がローカルリポジトリを管理する方式
http://image.itmedia.co.jp/ait/articles/0901/14/r1302.jpg

■ 分散管理方式(分散型)

メリット・デメリット

メリット
http://www.atmarkit.co.jp/ait/articles/0901/14/news133.html
http://www.atmarkit.co.jp/ait/articles/0901/14/news133_2.html
より

【1】一時的作業の履歴管理が容易
【2】柔軟なワークフロー
【3】パフォーマンスとスケーラビリティ
【4】オフラインによる開発
【5】障害に強い
【6】オープンソースの改編物の公開に最適
【7】SVNを集中リポジトリとして利用可能
デメリット
http://www.atmarkit.co.jp/ait/articles/0901/14/news133_2.html
より

【1】管理が煩雑に
【2】ロックができない
【3】細かいアクセス制御ができない
【4】リポジトリ単位しか作業セットを取得できない
【5】Windows用のツールが成熟していない
【6】一般開発者向けのノウハウが十分に蓄積されていない
【7】利用経験があるエンジニアを集めにくい

用語

クローン(clone)
 * サーバ上のリポジトリの複製をローカルマシン上のローカルリポジトリとして作成
 * 中央リポジトリの完全な履歴を含んだリポジトリの複製を取得する
コミット(commit)
 * ローカルリポジトリへコミット
 * サーバのリポジトリにはコミットされない( !!注意!! SVNのコミットとは異なることに注意)
プッシュ/プル(push/pull)
■ プッシュ(push)
 * SVNのコミット相当の操作
 * ローカルのリポジトリの変更内容をサーバ上のリポジトリへ送信

■ プル(pull)
 * サーバ上のリポジトリから各開発者のリポジトリの変更内容を取得
 * 各開発者のリポジトリは何らかの方法でリポジトリを公開する必要がある
マージ/リベース(merge/rebase)
http://www.backlog.jp/git-guide/stepup/stepup1_4.html
http://kray.jp/blog/git-pull-rebase/
■ マージ(merge:合流)
 * masterブランチに別ブランチの内容を結合させる

 【利点】変更内容の履歴はそのまま残る
 【欠点】履歴が複雑になる

■ リベース(rebase:付け替え)
 * 別ブランチの内容を masterブランチの後ろに付け替える

 【利点】履歴が単純になる
 【欠点】元のコミットから変更内容が変更される

分散バージョン管理

[1] git
[2] Mercurial(HG)
[3] Bazaar(バザー)