1分でわかる、GitとSubversionにおけるブランチの違い
Subversionにおけるブランチとは、ディレクトリのことである。
Subversionにおいては、ブランチとは単なるディレクトリに過ぎません。Subversionではよく下記のようなツリー構造にすることが推奨されます。
project - trunk
- branches - foo
- bar
ブランチfooやブランチbarは、たいていtrunkディレクトリをコピーして作ります。
「ブランチを作成する」という行為は「ディレクトリをコピーすること」と操作的には同じであり、1コミットとして扱われます。
$ svn cp svn://path/trunk svn://path/branches/foo -m "make branch"
「ブランチの名前変更」も「ディレクトリのリネーム」と同じ操作であり、やはり1コミットして扱われます。
$ svn mv svn://path/branches/foo svn://path/branches/foo2 -m "rename branch"
Gitにおけるブランチとは、「別宇宙」のことである
Gitにおいては、ブランチとはディレクトリのことではありません。それは「パラレルワールド」、つまり「今ある宇宙とは平行して存在する別の宇宙」なのです。
よって、ブランチディレクトリというものは存在しませんし、「ブランチの作成や名前変更」は1コミットとしてカウントされません。
Ethnaの例で説明します。
https://github.com/ethna/ethna
Ethnaには"master"や"develop"というブランチがあります。
ところがレポジトリのディレクトリ構成のどこを見ても"master","develop"という名のディレクトリは存在しません。
↓↓
実はデフォルトで見えているものは"master"ブランチの中身なのです。
("master"とは、Subversionでいう"trunk"です。 Gitでは慣用的に"master"と呼ぶみたいです。)
"develop"ブランチはどこにあるのでしょうか?
画面左上メニューの"switch branches"のプルダウンで選択することができます。
↓↓
"master"と"develop"を切り替えて、履歴(commits)を見てみてください。
それぞれ異なる履歴が表示されます。
「ブランチ=別宇宙」であることが実感できるかと思います。
カテゴリ:
Git