前提
-
本記事は、SVNの利用経験はあり、Gitのコンセプトをなんとなく理解できているが、まだGitを使った経験がないエンジニア向けに書かれています。
-
Gitを使いこなしているわけではないので、その点、割り引いて読んでいただけると幸いです。
はじめに
-
Gitは、SVN(Subversion)とは違い、分散型のバージョン管理システムのため、開発者は割り当てられたローカルリポジトリを用いて必要な作業をローカルで行うことができます。このことから、オフラインで作業したり、他の開発者への影響を回避しやすいというGitのコンセプトは理解できていました。
-
しかし、概念的な理解に留まっていたため、実際の運用において注意すべきポイントが何であるか、実際にGitを触れてみて気づいたことをまとめてみました。
GitとSVNの違いは?
- ブランチ作成粒度(頻度)
個人的にはここが一番大きいのかなと思っていて、私が過去担当した案件だとSVNの場合1つの機能追加案件で複数の開発者が同時にブランチを共有して開発するケースが一般的でした。
Gitの場合ブランチ戦略にもよるものの、Redmineにある小さな機能改修レベルであってもブランチを新規作成することを前提とした設計思想をとっているように思えます。(その分ブランチのライフサイクルも短い)
比較表 | SVN | Git |
---|---|---|
ブランチ作成粒度 | 一大作業 | こまめに作成 |
ブランチ内部構造 | ファイルコピー(完全なディレクトリ構造) | ポインタ(参照) |
- Gitにはリモートサーバ(GitHub等)への変更内容反映に至るまでに3段階ある(SVNは1段階のみ)
ステージングエリアを設けているのは、反映したくない更新を除外するだと思いますが、都度addが必要なのは少し面倒な気もしています。
段階とコマンド | SVN | Git |
---|---|---|
ステージングエリアへの登録 | なし1 | git add |
ローカルリポジトリへの反映 | なし | git commit |
リモートリポジトリへの反映 | svn commit | git push |
- (TBD)気づきがあれば適宜追加
-
svn addはバージョン管理対象としての登録に限定した用途でGitのそれとは異なります。 ↩