1分でわかる、GitとSubversionにおけるブランチの違い

Subversionを長らく使ってきた人がGitを使ってみると、ブランチの概念が全然違うことに面喰います。
最大の違いは、「ブランチ=ディレクトリであるかどうか」です。

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"という名のディレクトリは存在しません。
↓↓
ethna-github2.JPG


実はデフォルトで見えているものは"master"ブランチの中身なのです。
("master"とは、Subversionでいう"trunk"です。 Gitでは慣用的に"master"と呼ぶみたいです。)

"develop"ブランチはどこにあるのでしょうか?

画面左上メニューの"switch branches"のプルダウンで選択することができます。
↓↓
ethna-github.JPG

"master"と"develop"を切り替えて、履歴(commits)を見てみてください。
それぞれ異なる履歴が表示されます。

「ブランチ=別宇宙」であることが実感できるかと思います。
カテゴリ:

人気記事