北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

git型の共同作業とSVN(CVS)型の共同作業の違い

ずっと gitとsvkの違いってなんなのよ? と思ってたんですが、この図とか説明読んでようやくわかりました。

Gitでは旧来のCVS型とGit型の二つの共同作業のモデルが使えます。これが混乱の元でした。

Gitのすごさを本当に体感するなら、gitを使うだけでは不十分でGit型のモデルにそって開発することが必須です。

CVS

従来のSVN(CVS)のモデルです。pullをしてきて、pushで更新を戻します。

  • 1つの公開リポジトリに対し、複数人がpushを行う
    • pushにより他の人と競合するかも
  • メインのリポジトリにpushすることを目指す
    • 能動的 → 悪意のあるpushも可能 → "コミッター"を絞る必要あり

Git型

githubっぽいモデルです。pullをしてきて、pullで更新を持って行ってもらいます。

全体がpullでまわるため、pushがプライベートな操作として隠蔽されてるのがポイントです。

  • 1つの公開リポジトリに対し、pushを行うのは1名
    • pushで他の人との競合はありえないので、気兼ねなくpushできる
  • メインのリポジトリ*1からpullされることを目指す
    • 受動的 → いい更新も悪い更新も存在してよく、その中で必要な更新だけとりこめばよい*2

*1:Git的にはメインリポジトリってのはないが、実質リリースされるコードを含むリポジトリ

*2:ただ、この判断する人に負荷が集中しますね