いまだに Git のことがよくわかっていない私ですが、これまでに使ってきたバージョン管理システムである CVS, Subversion, Git を比較してみました。
この比較では、各システムが内部的にどう管理しているのか、集中型か分散型かなどは置いておき、自分の理解を整理するためにバージョンの振りかた・タグ・ブランチの違いを図にしてみました。
比較
CVS
変更がコミットされるごとに、ファイルごとのリビジョンが上がります。
ブランチは切り替えるもので、タグはある時点での各ファイルごとのリビジョンをまとめたものです。
Subversion
変更がコミットされるごとに、全体のリビジョンが上がります。
ブランチはフォルダへのコピーで、タグもフォルダへのコピーです。
Git
変更がコミットされるごとに、コミットを表すハッシュ値が生成されます。
ブランチは切り替えるもので、タグはコミットに対する別名です。
ブランチは切られた枝全体を指すのではなく、枝の先端のコミットを指すもののようです。コミットには parent があるのでブランチが通ってきた履歴を追うことができます。
まとめ
CVS | Subversion | Git | |
---|---|---|---|
リビジョン(ハッシュ値) | ファイルごと | リポジトリ全体に対するもの | ソース一式に対するもの |
ブランチ | 切り替えるもの | コピーされたフォルダ | 切り替えるもの |
タグ | ブランチに対するもの | コピーされたフォルダ | ソース一式に対するもの |
図にしてみたところ CVS と Git の差が驚くほど少なく感じられ、Subversion がブランチとタグをディレクトリとして扱う点がかなり大きな違いであることが浮き彫りになりました。
編集履歴
- 2022/08/03 Gitのブランチの理解が間違っていたので図を差し替え